2011-05-14 33 views
1

有誰知道這個重寫規則有什麼問題嗎?.htaccess限定詞問題

RewriteRule ^example/?(.*)/?(.*)/?(.*)$ example.php?id=$1&ud=$2&ed=$3 [QSA,L] 

不應該通過檢測?作爲條件嗎?

編輯好的,讓我來重述一下我的問題。

如何讓Apache忽略$1 - $3如果它是空的,而只是去example.php?

例如,而不是3行:

RewriteRule ^example/(.*)/(.*)/(.*)$ example.php?id=$1&ud=$2&ed=$3 [QSA,L] 
RewriteRule ^example/(.*)/(.*)$ example.php?id=$1&ud=$2 [QSA,L] 
RewriteRule ^example/(.*)$ example.php?id=$1 [QSA,L] 

我需要一個行來解決所有3個或更多。

+1

我想你需要澄清你想達到的目標。你能舉出具體的例子嗎? – csl 2011-05-14 09:15:39

+0

例如,它不會通過那麼第一個(*),而不管「example/a/b/c」它只會相對於「example.php?id = a&ud =&ed =」換句話說,我不知道這是怎麼回事? – Poppy 2011-05-14 09:21:13

+0

它似乎將它作爲?id = a/b/c而不是...... – Poppy 2011-05-14 09:34:06

回答

1

貪婪考慮讓你的規則等同於以下:

RewriteRule ^example/?(.*)$ example.php?id=$1 [QSA,L] 

你可能想要這個:

RewriteRule ^example/([^/]+)/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L] 

基於你對你的問題的最近編輯,我d使用多種規則:

RewriteRule ^example/([^/]+)/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L] 
RewriteRule ^example/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2 [QSA,L] 
RewriteRule ^example/([^/]+)/?$ example.php?id=$1 [QSA,L] 
+0

它會檢測它是否爲空並忽略它嗎? – Poppy 2011-05-14 10:09:53

+0

好吧,它似乎並沒有工作,它只是給我錯誤404 ... – Poppy 2011-05-14 10:12:38

1

404錯誤可能是由於缺少RewriteEngine引起的。爲了解決與參數,使用的問題:

RewriteEngine on 
RewriteRule ^example/?([^/]+)?/?([^/]+)?/?([^/]+)?/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L] 
+0

它是如何不斷給我錯誤404?這就像它不認識和分階段? – Poppy 2011-05-14 10:15:06

+0

404錯誤可能是由於缺少RewriteEngine引起的。 – AndersTornkvist 2011-05-14 10:38:34

+0

我更新了正則表達式。我已經測試並驗證了它的功能如預期的那樣在我的PHP服務器上打印出$ _GET的example.php。 – AndersTornkvist 2011-05-14 10:41:09

1

難道不應該通過檢測工作?作爲條件?

當然,但反向引用依然按順序填充。如果第一個括號(.*)匹配空字符串,則$1爲空;沒有辦法讓這個捕獲被「跳過」。

+0

所以你說沒有「如果($ 1是空的)Skip id = $'」這樣的東西? – Poppy 2011-05-14 10:30:47

+0

,因爲我的htaccess就像1k線一樣長,因此,即使使用litespeed htaccess緩存功能,它也有點慢。 – Poppy 2011-05-14 10:31:28

+0

@Poppy:不,您可能不會將條件語句嵌入到結果URI中。 – 2011-05-14 10:47:42