重写包含空格的URL

时间:2009-11-17 18:37:29

标签: php apache url mod-rewrite

我有一个以下格式的网址: 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

我甚至不能使用没有“ - ”的名字。我需要产品名称,就像在数据库中一样。这可能吗?

4 个答案:

答案 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