.htaccess如果存在$\u GET vars,则不重写

.htaccess如果存在$\u GET vars,则不重写,.htaccess,url-rewriting,.htaccess,Url Rewriting,嗨,我正在努力确保我的所有URL都被更正为以正斜杠结尾,这样如果用户键入 http://www.mydomain.com/blogPost 它将成为 http://www.mydomain.com/blogPost/ 我在这里找到了这个问题的答案(感谢安德鲁·G·约翰逊) 除了有$GET vars时,此解决方案几乎完全有效。因此,当url有$时,您可以得到这样的变量 http://www.mydomain.com/blogPost/^start=10 RewriteCond %{REQ

嗨,我正在努力确保我的所有URL都被更正为以正斜杠结尾,这样如果用户键入

http://www.mydomain.com/blogPost 
它将成为

http://www.mydomain.com/blogPost/
我在这里找到了这个问题的答案(感谢安德鲁·G·约翰逊)

除了有$GET vars时,此解决方案几乎完全有效。因此,当url有$时,您可以得到这样的变量

http://www.mydomain.com/blogPost/^start=10 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
htaccess将其重写为

http://www.mydomain.com/blogPost/^start=10/ 
这会导致错误

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

http://www.mydomain.com/blogPost/^start=10 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [L,R=301]
因此,为了让htaccess在存在$\u get vars时忽略URL,我尝试在上述代码中添加一个RewriteCond来检查请求的^ URI(因为在这个站点上$\u get vars以^而不是a开头),我尝试了以下所有操作,但没有任何效果。谁能给我指出正确的方向吗

RewriteCond %{REQUEST_URI} [^\^]

RewriteCond %{REQUEST_URI} ![^\^]

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

(我还用{QUERY_STRING}尝试了上面的方法)

这应该可以使带有
^
的URI被忽略:

RewriteCond %{REQUEST_URI} !\^
但它不能解决前面没有斜杠的问题,这条单独的规则应该注意:

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

RewriteCond%{REQUEST\u URI}!\^重写cond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_URI}!(.*)/$RewriteRule^(.*)$http://%{http\u HOST}/$1/[L,R=301]
此代码仍然在$\u GET vars后面追加一个正斜杠。我理解正确了吗?@TheoKouzelis当我在一个普通的apache 2.2安装中把这些规则放在一个空白的htaccesss文件中时,它不会重定向到任何包含
^
的请求。它在不同的系统上进行了测试,效果非常好。非常感谢您的帮助
^start=10
不是查询字符串。这可能是php脚本的一些内部处理,将其转换为
$\u GET
变量,但这肯定是URI的一部分,而不是查询字符串。