2013-06-02 334 views
2

我想從url中刪除查詢字符串。查詢字符串隱藏

For eg: localhost/index.php?page=value to localhost/index.php 

我目前正在使用:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^/index.php$ 
RewriteRule ^(.+)\.php$ /$1/? [R=301,L] 
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page=$1 [L] 

它不改寫 ... 什麼我做錯了嗎?

編輯

刪除QSL通過克萊夫

+1

QSA代表查詢字符串追加... – Clive

+0

URL的查詢字符串部分不能被改寫,它會被添加到無論你做什麼,重寫的URL的新查詢字符串。 URL重寫意味着反過來工作。 – Alasdair

+1

@Alasdair:這只是部分真實的,如果你在'?'中進行重寫,它應該刪除查詢字符串。有關詳細信息,請參閱此博客文章:http://www.simonecarletti.com/blog/2009/01/apache-rewriterule-and-query-string/ – Wolph

回答

2

評論這裏我們重寫原始請求將自己與一個空的查詢字符串,如果查詢字符串是不是空的。

RewriteEngine On 
RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^(.*)$ $1? 

這已經包括了Apache,雖然與[QSD] Query String Discard

RewriteRule ^(.*)$ $1 [QSD] 

注:查詢字符串允許你跟蹤各種各樣的東西在日誌文件中,並從外部來源的鏈接。這樣做會限制這些選項。

這可能不是你想要做的(通過這種方式失去了很多舊的鏈接)。所以,以下是如何將舊的查詢字符串重定向到新的URL作爲301重定向。這對於那些不熟悉RegEx或者Apache工作方式的人來說會有點混淆。在字符串的第一部分以問號結束意味着「也許是前面的字符」。在這種情況下,我們在替換結束時添加了?(不是REGEX模式),因爲根據Apache manual for the QSD flag,Apache的默認行爲類似於[QSA](查詢字符串附加)。因此,單獨添加單個?正在創建一個空查詢字符串以使現有字符串無效。在StackOverflow上有幾個使用這種方法的答案。

RewriteCond %{QUERY_STRING} page=(.*) 
RewriteRule .* %1/? [R=301,L] 

使用[QSD]你可以這樣寫:

RewriteCond %{QUERY_STRING} page=(.*) 
RewriteRule .* %1/ [R=301,L,QSD] 

你的另一場比賽中需要像contact.php文件並將其重定向到/contact/。這也可能仍然有效。

RewriteCond %{REQUEST_URI} !^/index.php$ 
RewriteRule ^(.+)\.php$ /$1/? [R=301,L] 

這條規則也與QSD寫成:

RewriteRule ^(.+)\.php$ /$1/ [R=301,L,QSD] 
相關問題