2014-10-02 222 views
0

我試圖從根目錄重定向除圖像,CSS,JavaScript以外的所有請求到我的index.php,因此用戶無法直接訪問.php等其他文件。.htaccess雙查詢字符串參數

我在.htaccess文件下列規則在我的網站的根目錄:

RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_URI} !\.(css|js|png|jpe?g|gif|bmp|txt)$ 

RewriteRule ^(.*)$ index.php?url=$1 [NC,L,QSA] 

在index.php文件,我寫print_r($_SERVER)當我[QUERY_STRING]下訪問例如/test它顯示的東西我不理解:

array(
.. 
[QUERY_STRING] => url=index.php&url=test 
.. 
) 

我的問題是:這是怎麼回事?這會影響網站的性能嗎?

注意:如果我加了RewriteCond %{REQUEST_FILENAME} !-f它只顯示url=test,但是這允許直接訪問文件,所以刪除了這個條件。

+1

這表明您有兩個重定向。 /測試index.php?url =測試和比index.php第二個你有。 – Cheery 2014-10-02 20:23:01

+0

@Cheery是否可以只有一個重定向? – John 2014-10-02 20:24:41

+0

您是否嘗試添加不重定向index.php請求的條件?實際上,這是'!-f'的工作方式 - 它不會在文件存在時重定向。 – Cheery 2014-10-02 20:25:19

回答

0

正如Cheery在評論中指出的那樣,Apache正在執行多個重寫。您應該將index.php添加到重寫引擎應該單獨留下的列表中:

RewriteCond %{REQUEST_URI} !index\.php$ 
+0

試圖添加它在現有條件之前/之後,但仍然是相同的結果=> [QUERY_STRING] => url = index.php&url = foo – John 2014-10-02 20:30:21

+0

@John編輯過,再試一次? – wavemode 2014-10-02 20:36:21

+0

技術上它工作..直到請求包含... index.php $ – John 2014-10-02 20:52:40