2012-11-29 54 views
0

我試圖從大約10個現有的SO問題的答案無濟於事。在Rewrite rule that removes query string from URL and redirect使用薩爾曼A的回答,我創建了以下.htaccess文件:修復Botch.htaccess重定向嘗試

Options +FollowSymLinks 
RewriteBase/
RewriteEngine On 
RewriteCond %{QUERY_STRING} !="" 
RewriteRule ^(.*) /$1? [R,L] 

......其目標是採取這樣的網址:

http://www.example.com/index.php?c=web 

...,使它看起來像這樣:

http://www.example.com/web 

以下薩爾曼A的回答後,該網址看起來像:

http://www.example.com/?c=web 

然後我試圖去掉「?c =」部分 - 不幸的是我不知道我搞砸了什麼 - 然後我刪除了.htaccess文件,因爲我不想要亂七八糟的東西了。現在,即使沒有.htaccess文件,一些URL的 - 特別是,這三個網址我在測試薩爾曼A的答案點擊 - 看起來仍然是:

http://www.example.com/?c=web 

...即使我刪除的.htaccess文件。三個問題:1)儘管刪除了.htaccess文件,爲什麼這些更改仍然存在; 2)是我需要擔心的事情;並且,3)我怎麼修改.htaccess文件讓所有的URL看起來像:

http://www.example.com/web 

UPDATE:這就是我擔心http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/。如果我對301重定向進行修改,新訪問者訪問該網站,他們是否陷入了僵局?有沒有辦法解除這個緩存?

回答

1

當你說「採取這樣的網址,並使其看起來像這樣」,你的意思是讓它看起來像服務器的方式或使它看起來像瀏覽器(兩個完全不同的東西)。請參閱the top part of this answer進行一些說明。

您執行的答案使服務器看到沒有查詢字符串的請求。在URL /index.php?c=web通過URL /文件映射管道進入之後,mod_rewrite輸出:/index.php,刪除查詢字符串?c=web,最後web服務器採用/index.php併爲其提供服務(無查詢字符串)。當然,在所有這些都發生的時候,對這個mod_rewrite魔法一無所知的瀏覽器仍然顯示與它被告知要顯示的相同的URL,http://www.example.com/index.php?c=web,並且因爲它從未被告知,否則這就是你仍然的URL看到。

如果你想改變的是,瀏覽器看到的URL,那麼你需要瀏覽器外部重定向到新的URL。您可以使用這樣的事情:

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /(index\.php)?\?c=([^&\ ]+) 
RewriteRule^/%3? [L,R] 

所以,當你的瀏覽器請求http://www.example.com/index.php?c=web,此規則將對陣查詢字符串,並瀏覽器重定向到結果,/web,從而改變了URL的URL地址瀏覽器欄。瀏覽器現在看到這個新的URL,向這個新的URL向服務器發出一個全新的請求。您可能會想要將其改回原來的狀態,因爲我猜測您確實沒有/web的目錄或文件。所以,你這樣做:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?c=$1 [L] 

這使得它如此的服務器看到/index.php?c=web當有人請求/web

+0

我一直在研究你提供的鏈接(以及Apache文檔)。我想要一個外部重定向。我現在通過甲基苯丙胺實驗: 的http://本地主機:8888/DR/index.php文件 新指令: 選項+的FollowSymLinks -MultiViews RewriteEngine敘述上 RewriteBase/DR/ 添加你的線條,沒有什麼變化。請求'http:// localhost:8888/DR/index.php?c = web'仍然加載'http:// localhost:8888/DR/index.php?c = web'並仍顯示'http:// localhost :8888/DR/index.php?c = web'在瀏覽器中。 – vtacreative

+0

對不起,格式糟糕,我不得不嚴格截斷我的迴應,並編輯重要信息,因爲黨的字符限制。在這裏包含更多信息的「正確」方式是什麼?我應該把它全部添加到原始問題嗎?評論格式/字符規則並不十分有助於深入細節。我試圖真正理解這一點,而不是尋找快速剪切和粘貼解決方案。再次感謝。 – vtacreative

+0

@ CL75你不能在評論中格式化,你需要編輯你的原始問題來澄清你想要的東西。但是將我的代碼行添加到您的網址中,您需要調整我的示例以適應您的需要。我的例子假設你在''c = something'前面沒有任何**。如果你有東西,我的示例需要修改,以便在'%{THE_REQUEST}'匹配中包含DR。 –