htaccess重写查询字符串并删除空值

时间:2012-05-25 16:29:40

标签: .htaccess query-string

首先,抱歉我的英语不好。

我尝试重写从Form Get生成的url并重定向它。

我的网址是这样的:

http://www.mysite.com/properties?action=search&agreement=for-rent&category=my-category&type=&zone=my-zone&city=my-city

我已经配置了.htaccess:

11. RewriteCond %{QUERY_STRING} ^action=(?:[a-zA-Z\-]*)&(?:.*)=([a-zA-Z\-]*)&(?:.*)=([a-zA-Z\-]*)&(?:.*)=([a-zA-Z\-]*)&(?:.*)=([a-zA-Z\-]*)&(?:.*)=([a-zA-Z\-]*)$
12. RewriteRule (.*) %{REQUEST_URI}/%1/%2/%3/%4/%5/? [R=301,L]

所以基本上我的所有请求都直接指向index.php。

21. RewriteCond %{REQUEST_URI} !index\.php|resources|hidden
22. RewriteRule ^(.*)$ index.php/$1 [L]

一切正常,但问题是当我在查询字符串中有一个空值时,规则添加双斜杠和上面的url(例如whit& type =& zone = my-zone ... type为空value)会像那​​样翻译:

http://www.mysite.com/for-rent/my-category//my-zone/my-city/

问题是:如果我在查询字符串中有一个或多个空值,如何在.htaccess中删除生成的双斜杠?

由于

1 个答案:

答案 0 :(得分:1)

最简单的方法是进行另一次重定向(不是真正漂亮,因为它需要两个301)。

RewriteCond %{THE_REQUEST} //
RewriteRule .* $0 [R=301,L]

有趣的是,当url加载了一个双斜杠时,mod_rewrite会自动删除它。因此,正如您在上面所看到的那样,您只需要将URL重写为自己,就好了。