2016-05-14 297 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

相關問題