2016-02-26 102 views
0

我已將我的網站遷移到新軟件,並試圖確保將舊鏈接正確重定向到新網址。我認爲我一直在努力,直到我收到Google關於增加404的消息。模式匹配htaccess衝突

我似乎將導致新的htaccess需求和我的更改來解決舊的鏈接之間的衝突。

因此,新的鏈接看起來是這樣的:

http://www.exampledomain.com/search/?q=searchterm 

而在htaccess的他們拿起這樣的:

RewriteRule ^search/(.*)$ search.php?q=$1 

以上工作,因爲它應該。

舊的鏈接可能類似​​於以下任一:

http://www.exampledomain.com/search/searchterm/ 
or 
http://www.exampledomain.com/search/searchterm 

我已經把這個到htaccess的

RewriteRule ^search/(.*)/$ http://www.exampledomain.com/search.php?q=$1 [R=301,NC,L] 

如果我不添加的第一個規則,則新的URL只是調出404的。

如果我添加第二條規則,它將停止傳遞的searchterm並與第一條規則衝突。

已經嘗試了一些東西,但認爲必須有匹配或其他我失蹤的問題。

任何想法讚賞。

** **新增

所以我作出改變的建議,並就引起了幾個問題,但交換的規則的順序已經固定的,但還沒有完全解決了該問題

第一答覆後

所以現在我有這樣的:

RewriteRule ^search/(.*)/?$ http://www.exampledomain.com/search.php?q=$1 [R=301,NC,L] 
RewriteRule ^search/(.*)$ search.php?q=$1 

上述工作對於這些網址現在:

http://www.exampledomain.com/search/?q=searchterm 
and 
http://www.exampledomain.com/search/searchterm 

但對於網址是這樣的:

http://www.exampledomain.com/search/searchterm/ 

它導致這與防止搜索結尾的斜線:

http://www.exampledomain.com/search.php?q=drama/

所以只需要刪除或沒有結尾的斜線

+0

您的問題可能更適合於[serverfault](http://serverfault.com/):) –

回答

1

我認爲你只是在規則中缺少?,因爲/是可選的:

RewriteRule ^search/(.*)/?$ search.php?q=$1 [R=301,NC,L]

更新來解決斜線:

我猜的.*在下次使用前治後/。爲了解決這個問題,我們需要從比賽中排除:其中參數出現斜線後

RewriteRule ^search/([^/]*)/?$ search.php?q=$1 [R=301,NC,L]

更新,以解決增加的情況下:

我不知道,如果你的意思是字面上/search/q=searchstr/search/?q=searchstr所以我會嘗試解決這兩種情況。

如果是後者,這是一個真正的查詢字符串,將爲了轉嫁給新的URL查詢字符串中使用QSA上面的第一個規則:

RewriteRule ^search/$ search.php [R=301,NC,QSA,L]

爲了解決第一個變化(不?查詢字符串),你就需要把這個規則之上的第一,字面看起來爲q=

RewriteRule ^search/q=(.*)$ search.php?q=$1 [R=301,NC,L]

而且因爲我得到的感覺,你會再次更新這個問題想請教一下,如果有一個尾隨斜線,我會繼續和修改規則來處理這種情況下,會發生什麼:

RewriteRule ^search/q=([^/]*)/?$ search.php?q=$1 [R=301,NC,L]

如果這些規則仍然不能解決您的每個案例,那麼您正在處理您之前的網址中的一些非常糟糕的代碼,我爲您感到非常遺憾。:P

+0

嗨,感謝你 - 它幾乎工作,並已得到另一個網址工作,但仍有問題添加了結果到上面的問題,但基本上它留下了一個斜線現在 – OLM256

+0

感謝您的更新和你的時間 - 這三個主要的URL的工作輝煌。它現在停止了一種類型,其URL類似於/ search/q = searchterm,因爲它現在無法通過searchterm。雖然我可能只是改變這個編碼,但我不確定它可以在不與其他人衝突的情況下解決,因爲主要編碼正在工作。 – OLM256

+0

嗯,我只能說....非常感謝!所有工作現在完美,我感謝您的耐心和時間更新答案。我錯過了錯過的道歉?在以前的答覆中,並導致你額外的工作。它爲我節省了幾千美元的谷歌網址,這是最多變種的網址。 – OLM256