2016-05-14 95 views
1

.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/如果我不重定向谷歌,认为这是两个不同的页面)

文档介绍了如何删除查询字符串:

https://wiki.apache.org/httpd/RewriteQueryString

但我不知道如何应用到我的情况下,或者是我的尝试不起作用

我的第二个解决方案使用的标志[QSD]查询字符串丢弃。可能有一些东西我不明白,因为它不一样,如果

LoadModule rewrite_module modules/mod_rewrite.so 

httpd.conf文件未注释工作,要么

+0

后整个URL请 – sjsam

+0

@sjsam:我更新的问题与整个URL – segon

+0

的questios不明确,你希望用户看到“www.myDomain.com/ca /​​ blog /”对吗? – sjsam

回答

0

你可以在你的根的.htaccess使用这样的规则:

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^lang= [NC] 
RewriteRule ^(ca/blog/?)$ %{REQUEST_URI}? [NC,L,R=301] 
+0

您的解决方案非常复杂。请参阅文档:https://wiki.apache.org/httpd/RewriteQueryString – segon

+0

是的,我已经多次阅读这些文档。删除查询字符串非常简单,只需要一条规则即可:'RewriteRule^ca /​​ blog /?$ $ 0? [L,R]',但它会删除任何查询字符串,而不仅仅是'lang ='和'?lang ='在内部也不可用。 – anubhava

+0

为什么这不起作用? RewriteRule^ca /​​ blog /?lang = ca /​​ ca /​​ blog /? [L,R = 301] – segon

0

在一开始检查。当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/ 

说明

  1. 在我们检查查询字符串langcaRewriteCond

  2. 如果条件满足,我们在最后附加一个空的查询字符串?。由于您的原始网址已损坏,我们将R=permanent告知服务器重定向是永久性的。

+0

问题是删除了字符串 – segon

+0

请记住,我要求从ca/blog /?lang = ca到ca/blog/ – segon

+0

@segon:我已更新答案以符合您的要求。请lemme知道这个作品 – sjsam

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 ....

+0

我不明白你的答案。我的问题的标题是删除de querry字符串。你的答案如何解决? – segon

+0

如果你想匹配查询字符串中的某些内容(特别是你是否指定了lang),你需要添加一个RewriteCond来完成匹配,你将无法用RewriteRules来解决它。 –

+0

你的答案是否删除了字符串? – segon