如果有$ _GET变量,.htaccess不会重写

时间:2012-08-20 12:28:46

标签: .htaccess url-rewriting

您好我正在尝试确保我的所有网址都以正斜杠结尾,以便用户输入

http://www.mydomain.com/blogPost 

它会变成

http://www.mydomain.com/blogPost/

我在这里找到了这个问题的答案How can I force some pages to end in a slash [.htaccess](谢谢Andrew G. Johnson)。

除了$ _GET vars之外,这个解决方案几乎完美无缺。所以当url有像这样的$ _GET vars

http://www.mydomain.com/blogPost/^start=10 

htaccess将其重写为

http://www.mydomain.com/blogPost/^start=10/ 

会导致错误。

从堆栈溢出问题复制的原始代码如下所示

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]

所以当有$ _GET变量时让htaccess忽略url我尝试在上面的代码中添加一个RewriteCond来检查REQUEST_URI是否为^(因为在这个网站上$ _GET变量以^而不是?开头)我尝试了以下所有但没有任何作用。任何人都可以指出我正确的方向

RewriteCond %{REQUEST_URI} [^\^]

RewriteCond %{REQUEST_URI} ![^\^]

RewriteCond %{REQUEST_URI} ^(.*[^\^]) 

(我也尝试过使用{QUERY_STRING})

1 个答案:

答案 0 :(得分:1)

这应该使得^的URI被忽略:

RewriteCond %{REQUEST_URI} !\^

但是当它之前没有斜线时它没有解决,这个单独的规则应该照顾:

RewriteCond %{REQUEST_URI} [^/]\^
RewriteRule ^(.*)\^(.*)$ /$1/^$2 [L,R,NE]