2014-07-17 36 views
3

在我的.htaccess文件我有:

RewriteEngine On 
RewriteBase/
RewriteRule ^([^/]+)/?$ index.php?ToDo=$1 [L,QSA] 

當做的print_r($ _ GET),它輸出

Array ([ToDo] => index.php) 

然而,當我改變了重寫規則爲

^([^/.]+)/?$ index.php?ToDo=$1 [L,QSA] 

print_r然後輸出$ _GET是一個空數組。有人能向我解釋爲什麼會發生這種情況嗎

+1

什麼URL產生這個輸出? – kero

+0

完整的網址在我的本地服務器上輸出//local.test/ –

回答

4

讓我們舉個例子URI /abc

你的第一個正則表達式:

^([^/]+)/?$ 

匹配/abc並重寫爲:

/index.php?ToDo=abc 

現在mod_rewrite發動機再次運行,並正則表達式匹配^([^/]+)/?$再次爲URI /index.php並重寫爲:

/index.php?ToDo=index.php 

你的第二個正則表達式:

^([^/.]+)/?$ 

工作得很好,因爲它不符合/index.php URI。寫這個規則

最好的辦法是這樣的:

RewriteEngine On 
RewriteBase/

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

這兩RewriteCond線將防止重寫,如果請求的是一個有效的文件或目錄。

+0

奇妙的;謝謝,@Anubhava!當這個選項可用時,我會接受這個。我很欣賞解決方案。 –

+0

不客氣,很高興幫助。 – anubhava

+1

很好解釋,+1 :) – zx81

相關問題