2015-05-29 34 views
2

我一直是很長時間的讀者,但這是我的第一篇文章。通常情況下,我可以通過任何問題解決我的問題,但這個問題讓我花了很多時間,而且我無所適從。.htaccess - 從網址去除角色'%26'

從好的一面來說,我已經學到了很多關於.htaccess代碼的構成,而不是我所有這些年來一直在做的剪切和粘貼。

手頭的問題是我正在從舊的CMS系統遷移到新的系統。舊系統在網址中以十六進制格式'%26'顯示[ < &>>字符。新的CMS系統將其完全剝離。我一直試圖通過重寫規則來刪除它。

The objective is to make this url: 
http://domain.com.au/drums-%26-percussion/ 

Redirect to this: 
http://domain.com.au/drums-percussion/ 

我已經嘗試了很多行和組合,但這兩個例子都是我能得到的最接近它的工作。

Example A) 
RewriteRule ^(.*)\%26(.*)$ http://domain.com.au/$1-$2 [L,NE,N,R=301] 

上面的實例作品,如果我實際使用&,而不是十六進制格式%26。由於某種原因,我不知道我的火災。例如,沒有任何反應。我已經厭倦了26%左右的變化。

Example B) 
RewriteCond %{THE_REQUEST} ^(.*)(-%26-)(.*) [NC] 
RewriteRule^http://domain.com.au/$1-$2 [L,NE,R=302] 

我在某處讀到%26不得不放入要拾取的條件。所以我嘗試了這個。它讀取%26並關閉重定向。問題是我沒有傳達$ 1 $ 2的價值。我得到這個代碼的最終結果是:

Start: 
http://domain.com.au/drums-%26-percussion/ 
Redirect: 
http://derringers.testpad.com.au/- 

我欣賞任何和所有的建議是這個問題。謝謝。

回答

1

作爲documentation狀態:

在第一RewriteRule,它抵靠(%-decoded)請求的URL路徑匹配。

這意味着,你在瀏覽器中看到的網址:

http://domain.com.au/drums-%26-percussion/ 

,實際上就是:

http://domain.com.au/drums-&-percussion/ 

RewriteRule嘗試匹配/drums-&-percussion

鑑於此,正確的RewriteRule匹配的網址是:

RewriteRule ^(.*)-&-(.*)$ http://domain.com.au/$1-$2 [L,NE,N,R=301] 
+0

謝謝你對此的澄清。我使用了正確的流程,但是由於什麼原因無法查看/測試所需的結果。有時候你可以四處循環,想念你正前方的答案。 上面的重寫代碼完美地工作。謝謝。 – MetalMonkey

+0

我想投票這是正確的,但我沒有足夠的代表。感謝你的寶貴時間。 – MetalMonkey