我對Apache的一個簡單的mod_rewrite發生一個基於PHP的博客:mod_rewrite的影響GET變量
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?story=$1 [L]
但是,當我看着$ _GET [「故事」]在PHP腳本,它給了我「 index.php「。
任何想法?
我對Apache的一個簡單的mod_rewrite發生一個基於PHP的博客:mod_rewrite的影響GET變量
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php?story=$1 [L]
但是,當我看着$ _GET [「故事」]在PHP腳本,它給了我「 index.php「。
任何想法?
如果在傳遞過程中發生任何導致內部或外部重定向的更改,Apache將再次運行規則。你應該用規則趕上本作的index.php
RewriteRule ^index\.php$ - [L]
只是用該地址不變。這就是WordPress所做的。
根據您的apache版本,您可以使用RewriteLogLevel或LogLevel將重寫日誌級別設置爲8。在舊版本中,這個必須在httpd.conf中完成,所以你需要一個本地測試站點。
不要讓該登錄或您的表現受到影響。
編輯:
下面是來自docs on the rerun了L位下報價:
如果您在任何.htaccess文件或部分使用重寫規則,重要的是要擁有的是如何規定的一些理解被處理。這種簡化的形式是,一旦處理了規則,重寫的請求就會交還給URL分析引擎,以便處理它。有可能在處理重寫的請求時,可能會再次遇到.htaccess文件或段,因此規則集可能會從頭再次運行。最常見的情況是,如果其中一個規則導致重定向(無論是內部還是外部),則會導致請求過程重新開始。
我只是想知道發生了多少次,什麼使它停止循環 –
@WalterTross您可以輕鬆創建一個重寫無限循環,我今天下午做了幾次。大多數瀏覽器會通過抱怨太多的重定向來讓你知道。 –
是的,但在這種情況下有[L],沒有[R],並且似乎像'index.php?story = index.php'或'index.php?story = index.php?story = ......順便說一句,實際上叫 –
這是在DOCUMENT_ROOT嗎?或者你有更高級的目錄RewriteRules?啓用'RewriteLog'來詳細調試它。 – mario
'$ 1'被'(。*)'所捕獲,所以它會捕獲從開始到結束的所有內容(由於'^'和'$')。什麼是您輸入'$ _GET ['story']'輸入'index.php'的URL? – MatRt
example.com/blog/index.php?story=12345 = example.com/blog/12345 – Richard