我有一個前端控制器執行以下操作:一些重寫規則,導致404無法正常使用
$pages = array('home', 'login', 'create-account', 'activate');
$page = ((empty($_GET['p'])) ? 'home' : $_GET['p']);
if (in_array($page, $pages) && file_exists($page . '.php'))
include $page . '.php';
else
include '404.php';
然後,我有這個mod_rewrite
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z-]+)$ index.php?p=$1 [L]
RewriteRule ^(activate)/([\w-]+)$ index.php?p=$1&f=$2
如果我訪問
它的工作原理:
如果我訪問:
它將給我一個真正的404(我的自定義:P),而不是把我送到404頁。這是因爲,重寫規則的:
重寫規則^([AZ - ] +)$的index.php P = $ 1 [L],因爲它僅接受AZ和 -
如果我將其重寫到:
RewriteRule ^(.*)$ index.php?p=$1 [L]
它的工作,併發送至404,但隨後這個重寫是行不通的:
RewriteRule ^(activate)/([\w-]+)$ index.php?p=$1&f=$2
因爲第一匹配。
如果我試圖改變的地方:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(activate)/([\w-]+)$ index.php?p=$1&f=$2 [L]
RewriteRule ^(.*)$ index.php?p=$1 [L]
我得到的所有網頁上的404。
我該如何解決這個問題?
你的重寫規則似乎只是尋找小寫字母和破折號? – OmnipotentEntity
請閱讀整個問題。 – John
你可能想嘗試使用'RewriteRule ^([^ /] *)$ index.php?p = $ 1',這會排除任何帶有/的字符串(因此你的第一個字符串會再次工作)。但是這會導致垃圾與/ s在裏面,不會sl in。 – OmnipotentEntity