2013-01-13 14 views
1

我的.htaccess有一個小故障。我GOOGLE了一下,並嘗試了一些沒有任何結果的東西,所以我不得不求助於SOF帶有htaccess衝突問題的SEO網址

考慮以下htaccess規則;

# CATEGORY LISTING 
ReWriteRule ^listing/category/(.*)/(.*)/(.*)/(.*) ?module=listing&type=category&get=$1&c_id=$2&c_name=$3&page=$4 [L] 

ReWriteRule ^listing/category/(.*)/(.*)/(.*) ?module=listing&type=category&get=$1&c_id=$2&c_name=$3 [L] 

# CATEGORY FILTER 
ReWriteRule ^listing/category/(.*)/(.*)/(.*) ?module=listing&type=category&orderType=$1&order=$2&page=$3 [L] 

ReWriteRule ^listing/category(.*)/(.*) ?module=listing&type=category&orderType=$1&order=$2 [L] 

ReWriteRule ^listing/category/(.*) ?module=listing&type=category&page=$1 [L] 

ReWriteRule ^listing/category ?module=listing&type=category [L] 

這裏的問題是有兩個規則是相互矛盾的;

這條規則;

ReWriteRule ^listing/category/(.*)/(.*)/(.*) ?module=listing&type=category&get=$1&c_id=$2&c_name=$3 [L] 

與此規則衝突;

ReWriteRule ^listing/category/(.*)/(.*)/(.*) ?module=listing&type=category&orderType=$1&order=$2&page=$3 [L] 

有沒有辦法解決這個衝突?

謝謝你的幫助。

+0

¿什麼衝突?你知道存在衝突,但不能解釋爲什麼或你期望在每個衝突規則中會發生什麼。也許如果你給出一些傳入URL的例子,人們可以理解規則應該做什麼。 –

+0

您好,首先感謝您花時間閱讀我的問題並發表評論。我認爲這很清楚,喬恩解釋說,由於構建是相同的,第二條規則從不適用。這是問題/衝突。感謝您的時間。 – Revenant

+0

現在很清楚,但我在答案前2小時發表了我的評論。 –

回答

2

有沒有辦法解決這個衝突?

要解決這個問題,需要使查詢字符串get和查詢字符串order的URI相互排斥。你有兩個完全相同的正則表達式,所以第二個將永遠不會被應用,因爲任何匹配的第二個將簡單地由第一個處理。

例如,您可以使其中一個看起來像:/order/category/(.*)/(.*)/(.*)和另一個/listing/category/(.*)/(.*)/(.*)。這兩個URI是相互排斥的,永遠不會發生衝突。

此外,您應該將您所有的(.*)更改爲([^/]*),因爲(.*)不貪婪並且會吞噬額外的路徑。

+0

感謝Jon的回覆。我使用的是MVC構建,因此列表的一部分url包含頁面'listing.php'。如果我將它改爲'order',它會嘗試包含'order.php',這會導致錯誤。但是如果我沒有任何其他解決方法,我會從PHP端使用它來包含'listing.php'而不是'order.php'。謝謝你的時間來幫助我解決這個問題喬恩。非常感激。 – Revenant

+0

+1真的很難搞清楚。至少對我來說。像往常一樣,很好的演繹。 –