2013-03-29 78 views
0

我對Apache的一個簡單的mod_rewrite發生一個基於PHP的博客:mod_rewrite的影響GET變量

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^(.*)$ index.php?story=$1 [L] 

但是,當我看着$ _GET [「故事」]在PHP腳本,它給了我「 index.php「。

任何想法?

+0

這是在DOCUMENT_ROOT嗎?或者你有更高級的目錄RewriteRules?啓用'RewriteLog'來詳細調試它。 – mario

+1

'$ 1'被'(。*)'所捕獲,所以它會捕獲從開始到結束的所有內容(由於'^'和'$')。什麼是您輸入'$ _GET ['story']'輸入'index.php'的URL? – MatRt

+0

example.com/blog/index.php?story=12345 = example.com/blog/12345 – Richard

回答

1

如果在傳遞過程中發生任何導致內部或外部重定向的更改,Apache將再次運行規則。你應該用規則趕上本作的index.php

RewriteRule ^index\.php$ - [L] 

只是用該地址不變。這就是WordPress所做的。

根據您的apache版本,您可以使用RewriteLogLevel或LogLevel將重寫日誌級別設置爲8。在舊版本中,這個必須在httpd.conf中完成,所以你需要一個本地測試站點。

不要讓該登錄或您的表現受到影響。

編輯:

下面是來自docs on the rerun了L位下報價:

如果您在任何.htaccess文件或部分使用重寫規則,重要的是要擁有的是如何規定的一些理解被處理。這種簡化的形式是,一旦處理了規則,重寫的請求就會交還給URL分析引擎,以便處理它。有可能在處理重寫的請求時,可能會再次遇到.htaccess文件或段,因此規則集可能會從頭再次運行。最常見的情況是,如果其中一個規則導致重定向(無論是內部還是外部),則會導致請求過程重新開始。

+0

我只是想知道發生了多少次,什麼使它停止循環 –

+0

@WalterTross您可以輕鬆創建一個重寫無限循環,我今天下午做了幾次。大多數瀏覽器會通過抱怨太多的重定向來讓你知道。 –

+0

是的,但在這種情況下有[L],沒有[R],並且似乎像'index.php?story = index.php'或'index.php?story = index.php?story = ......順便說一句,實際上叫 –