在.htaccess
中,我需要删除查询字符串
?lang=ca, from ca/blog/?lang=ca
以另一种方式说,我想重定向:
www.example.com/ca/blog/?lang=ca
到
www.example.com/ca/blog/
这是我尝试过的两件不同的事情:
RewriteRule ^ca/blog/ /ca/blog/? [L,R=301]
RewriteRule ^ca/blog/$ /ca/blog/ [QSD]
我的选择有什么问题,以及如何做到这一点?
(ca/blog/?lang=ca
不存在。这就是为什么现在我需要重定向到ca/blog/
。如果我不重定向Google,请认为这是两个不同的页面)
该文档说明了如何删除查询字符串:
https://wiki.apache.org/httpd/RewriteQueryString
但我不知道如何申请我的案件或我尝试的不起作用
我的第二个解决方案使用标志[QSD]查询字符串丢弃。可能有一些我不理解的东西,因为它不起作用
答案 0 :(得分:0)
一开始检查是否
LoadModule rewrite_module modules/mod_rewrite.so
在httpd.conf
文件中取消注释。当apache运行时检查:
httpd -M | grep rewrite
验证mod_rewrite
确实已启用。一旦满足这些条件,下面的东西就可以了。
网址损坏:
http://www.example.com/ca/blog/?lang=ca
<强>规则强>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^lang=ca$
RewriteRule (.*)/ $1/? [R=permanent]
服务器将获取此
http://www.example.com/ca/blog/
<强>解释强>
在RewriteCond
中,我们检查查询字符串lang
是否为ca
。
如果条件满足,我们在末尾附加一个空查询字符串?
。由于您的原始网址已损坏,我们将R=permanent
告诉服务器重定向是永久性的。
答案 1 :(得分:0)
查询字符串不是您在重写规则中匹配的内容的一部分。如果要匹配查询字符串中的任何内容,则需要RewriteCond指令,将下一个RewriteRule限制为您指定的条件。
例如:
RewriteCond lang=cr %{QUERY_STRING}
RewriteRule ^/foo /foo [R=301]
这会将/foo?lang=cr
重定向到/foo
,但/foo?lang=en
和/foo
将不受影响。
当然,模式可能需要更严格一些,因为它也会匹配/foo?langlang=crown
,但仍然......
顺便说一句,在应用程序逻辑中实现它可能更容易,而不是在.htaccess中实现....
答案 2 :(得分:0)
您可以在根目录中使用此规则.htaccess:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^lang= [NC]
RewriteRule ^(ca/blog/?)$ %{REQUEST_URI}? [NC,L,R=301]