重写一个空的查询字符串

时间:2010-09-02 20:14:31

标签: apache mod-rewrite url-rewriting

我正在建立一些缓存到我的网站之一,我似乎无法找到是否有办法添加一个条件与mod_rewrite仅在请求的查询字符串为空时应用。

例如,我很想知道我是否可以获得没有像

这样的查询字符串的请求
http://www.example.com/

加载页面

http://www.example.com/index.home.html

但任何带有查询字符串的请求,例如

http://www.example.com/?id=32

正常加载而不受重写的影响。

我错过了什么?

3 个答案:

答案 0 :(得分:34)

我明白了。这似乎做得很好:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/$ /index.home.html

当然,如果有更好的方式,我很乐意听到它。

答案 1 :(得分:4)

我知道这些很旧,但更好的选择是:

col1

答案 2 :(得分:2)

为了匹配空的QueryString,我们在条件模式中使用 ^ $ 。以下规则会将 /file.html 重定向到 /file2.html ,但由于条件的原因,它无法重定向 /file.html?querystring

RewriteEngine on

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/?file.html$ /file2.html? [L,R]

规则末尾的空问号非常重要,因为它会丢弃旧的查询字符串,否则重定向的网址将显示为 /file2.html?querystring

或者:     

上的RewriteEngine
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^/?file.html$ /file2.html [L,R,QSD]

如果有查询字符串,QSD标志不会保留查询字符串。