Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重写包含空格的URL_Php_Apache_Url_Mod Rewrite - Fatal编程技术网

Php 重写包含空格的URL

Php 重写包含空格的URL,php,apache,url,mod-rewrite,Php,Apache,Url,Mod Rewrite,我有一个url,格式如下: domain/product.php?name=product a 现在我需要将其改写为: 域/产品a(包括单词中的空格)如: http://www.directline-holidays.co.uk/Costa 布兰卡 我该怎么做?到目前为止,我得到的最接近的结果如下: domain/p/product-a 在.htaccess中使用以下代码 RewriteEngine On RewriteRule ^p/([^/]*)/$ destination.php?nam

我有一个url,格式如下:
domain/product.php?name=product a

现在我需要将其改写为:
域/产品a
(包括单词中的空格)如:
http://www.directline-holidays.co.uk/Costa 布兰卡

我该怎么做?到目前为止,我得到的最接近的结果如下:
domain/p/product-a

在.htaccess中使用以下代码

RewriteEngine On 
RewriteRule ^p/([^/]*)/$ destination.php?name=$1
我甚至不能使用没有“-”的名字。我需要产品名称,就像它在数据库中一样。这可能吗?

将“%20”添加到URL,例如:

http://www.directline-holidays.co.uk/Costa%20Blanca
以十六进制为基数的20是表示空格的ASCII数字

编辑:

除了powtac的评论之外:

使用JS encodeURIComponent()函数对URL中应使用的值进行编码: 将“%20”添加到URL,例如:

http://www.directline-holidays.co.uk/Costa%20Blanca
以十六进制为基数的20是表示空格的ASCII数字

编辑:

除了powtac的评论之外:

使用JS encodeURIComponent()函数对URL中应使用的值进行编码:

这应该有效:它只会将/p/目录后面的URL字符串的其余部分提供给字符串的结尾,在您的情况下,这应该是URL的结尾,对吗

RewriteRule ^p/(.*)$ destination.php?name=$1
对于不是产品页面的页面,如果您知道它们将以.php文件扩展名结尾,则可以使用以下规则筛选这些页面:

 RewriteCond %{REQUEST_URI} !^.*(destination\.php).*$ 
 RewriteRule ^([^\.php]+)$ destination.php?name=$1

编辑:通过为destination添加RewriteCond,修复了无限循环条件。php

这应该可以工作:它只会将/p/目录后面的URL字符串的其余部分提供给字符串的末尾,在您的情况下应该是URL的结尾,对吗

RewriteRule ^p/(.*)$ destination.php?name=$1
对于不是产品页面的页面,如果您知道它们将以.php文件扩展名结尾,则可以使用以下规则筛选这些页面:

 RewriteCond %{REQUEST_URI} !^.*(destination\.php).*$ 
 RewriteRule ^([^\.php]+)$ destination.php?name=$1
编辑:通过为目标添加RewriteCond,修复了无限循环条件。php

尝试以下规则

Options +FollowSymLinks
RewriteEngine on
RewriteRule product-name-(.*)\.htm$ product.php?name=$1

试试这个规则

Options +FollowSymLinks
RewriteEngine on
RewriteRule product-name-(.*)\.htm$ product.php?name=$1


你们的意思是,若目的地是一个php文件,并没有重新编写它,否则重写任何东西到destination.php?如果是这样,这应该是可行的

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ destination.php?name=$1

你们的意思是,若目的地是一个php文件,并没有重新编写它,否则重写任何东西到destination.php?如果是这样,这应该是可行的

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ destination.php?name=$1


如果您使用PHP在链接周围创建链接add urlencode(),它将自动添加%20和其他内容。谢谢,我已经解决了。现在我需要的是重写规则,它允许我只使用产品名称创建url。请提供帮助。@Kunal:尝试以下REGEXP:^[^/]$您不能有带空格的URL:您提供的(
domain/product.php?name=product a
)不是有效的URL。使用正确的形式(
domain/product.php?name=product%20a
)可以满足您的需要。@Dor-ur-soln有效,但当我尝试时:RewriteRule^[^/]$destination.php?id=$1和url:它说找不到对象!有什么想法吗?如果你使用PHP创建链接并在链接周围添加urlencode(),它会自动添加%20和其他内容。谢谢,我已经解决了这个问题。现在我需要的是重写规则,它允许我只使用产品名称创建url。请提供帮助。@Kunal:尝试以下REGEXP:^[^/]$您不能有带空格的URL:您提供的(
domain/product.php?name=product a
)不是有效的URL。使用正确的形式(
domain/product.php?name=product%20a
)可以满足您的需要。@Dor-ur-soln有效,但当我尝试时:RewriteRule^[^/]$destination.php?id=$1和url:它说找不到对象!有什么想法吗?我已经使用了/p/product name格式,问题是我只想要域名后面的产品名。如果没有/pi see…那么应该是:RewriteRule^(.*)$destination.php?name=$1它将所有内容重定向到destination.php页面…需要进行检查,以便它不会重定向domain/index.php之类的.php页面,domain/contact-us.php等页面到目标页面…仅键入domain/的事件将被重定向到destination.php页面…有什么想法?我甚至尝试重写规则^([A-Z0-9]*)$destination.php?name=$1…但再次发现对象未找到问题:(@Kunal-检查我的编辑,以获得关于使用/p/product name格式筛选*.php文件的另一个建议。我已经使用了/p/product name格式,问题是我只想要域名后的产品名。如果没有/pi,请参阅…所以应该是:RewriteRule^(.*))$destination.php?name=$1它将所有内容重定向到destination.php页面…需要进行检查,以便它不会将.php页面(如domain/index.php、domain/contact-us.php等)重定向到目标页面…仅键入domain/事件会重定向到destination.php页面…ny idea?我甚至尝试重写规则^([a-Z0-9]*)$destination.php?name=$1…但还是找不到对象问题:(@Kunal-检查我的编辑以获得关于筛选*.php文件的另一个建议。我更喜欢使用我编写的第一个文件。根据我使用的服务器,我对第二个文件有问题。我更喜欢使用我编写的第一个。根据我使用的服务器,我对第二个文件有问题。