這是一個「自己提出問題並自己回答」的案例,我將這篇文章發佈給任何有同樣問題的人。如何調試mod_rewrite規則?
我在共享服務器上的.htaccess文件中調試mod_rewrite規則集時遇到了一些問題,我甚至無法訪問Apache錯誤日誌。我發現了一個巧妙的方法對它們進行調試,這是這樣的:
編寫一個簡短的腳本,只需打印出它的查詢字符串變量。例如在PHP:
<?='<pre>',htmlentities(print_r($_GET,true)),'</pre>'?>
是你所需要的。
假設您將此腳本命名爲「show.php」並將其放在/ public_html中。然後在您的.htaccess文件,確定您的規則集,你認爲可能會導致問題的點,然後插入這條規則:
RewriteRule (.*) /show.php?url=$1 [END]
的效果是一樣的在常規插入打印語句程序。它會讓你知道:(a)你在規則集中達到了這一點,(b)當前重寫的URL是什麼。
它不像真正的調試工具那樣閃光,但它完成了工作。
如果您使用的是Apache < 2.3.9,則必須使用[L]
而不是[END]
。在這種情況下,需要注意的是你的規則集不應該試圖將「/show.php」重寫爲其他任何內容。如果這是一個問題,您可以通過在最頂部加入這一規則解決它:
RewriteRule ^show.php$ - [L]
...請記住,當你完成調試將其刪除!
更有用的技巧是[這裏](http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules)。 – Doin