我有一个以下格式的网址:
domain/product.php?name=product a
现在我需要将其重写为:
domain/product a
(包括单词中的空格)如:
http://www.directline-holidays.co.uk/Costa Blanca
我该怎么做?到目前为止我得到的最接近的结果是:
domain/p/product-a
使用.htaccess中的以下代码
RewriteEngine On
RewriteRule ^p/([^/]*)/$ destination.php?name=$1
我甚至不能使用没有“ - ”的名字。我需要产品名称,就像在数据库中一样。这可能吗?
答案 0 :(得分:3)
这应该可行:它只会在/ p /目录后面的字符串结尾处给你剩下的URL字符串,在你的情况下应该是URL的结尾,对吗?
RewriteRule ^p/(.*)$ destination.php?name=$1
对于非产品页面的页面,如果您知道它们将以.php文件扩展名结尾,则可以使用以下规则过滤这些页面:
RewriteCond %{REQUEST_URI} !^.*(destination\.php).*$
RewriteRule ^([^\.php]+)$ destination.php?name=$1
编辑:通过为destination.php添加RewriteCond来修复无限循环条件
答案 1 :(得分:2)
在网址中添加“%20”,例如:
http://www.directline-holidays.co.uk/Costa%20Blanca
以十六进制为基数的20是空格的ASCII数。
编辑:
除了powtac的评论:
使用JS encodeURIComponent()函数对应在URL中使用的值进行编码: http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp
答案 2 :(得分:1)
试试这个规则..
Options +FollowSymLinks
RewriteEngine on
RewriteRule product-name-(.*)\.htm$ product.php?name=$1
或
Options +FollowSymLinks
RewriteEngine on
RewriteRule product/name/(.*)/ product.php?name=$1
RewriteRule product/name/(.*) product.php?name=$1
答案 3 :(得分:0)
你的意思是如果目的地是一个php文件,不重写,否则重写任何东西到destination.php?如果是这样,这应该工作
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(.*)$ destination.php?name=$1