問題描述
mod‑rewrite 結合了兩種不同的重寫規則 (mod‑rewrite combine two different rewrite rules)
我有以下重寫規則:
第一條規則:
RewriteCond %{REQUEST_FILENAME}.php ‑f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ $1\.php
第二條規則:
RewriteCond %{REQUEST_FILENAME} !‑f
RewriteCond %{REQUEST_FILENAME} !‑d
RewriteRule ^([^/]+/.+)$ module.php?page=$1 [L,QSA]
第一條規則允許我訪問/myscript.php as myscript
第二條規則允許我獲取 mydomain.com/ 之後的所有內容並將其轉換為查詢字符串以加載 module.php?page=querystring。
但是,對於第一個規則如果我要訪問 /myscript/myscript 然後我得到一個內部服務器錯誤。此外,我似乎無法在同一代碼中運行規則 1 和 2。因為它似乎衝突。如果我去 mydomain.com/myscript/myscript 它似乎會干擾 myscript.php,我最終會得到一個結果 page=myscript/myscript.php/myscript
關於如何組合的任何建議兩個?
謝謝。
參考解法
方法 1:
Have it like this:
Options ‑MultiViews
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/$1\.php ‑f
RewriteRule ^(.+?)/?$ $1.php [L]
RewriteCond %{REQUEST_FILENAME} !‑f
RewriteCond %{REQUEST_FILENAME} !‑d
RewriteRule ^([^.]+)/?$ module.php?page=$1 [L,QSA]