Php 重写包含空格的URL
我有一个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
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文件的另一个建议。我更喜欢使用我编写的第一个文件。根据我使用的服务器,我对第二个文件有问题。我更喜欢使用我编写的第一个。根据我使用的服务器,我对第二个文件有问题。