我有一个Front控制器执行以下操作:
$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
如果我访问
有效:
如果我访问:
http://localhost/folder/ $ $ $ $
它会给我一个真正的404(不是我的自定义:P),而不是将我发送到404页面。这是因为重写规则:
RewriteRule ^([a-z - ] +)$ index.php?p = $ 1 [L],因为它只接受a-z和 -
如果我将其重写为:
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.
我该如何解决这个问题?
答案 0 :(得分:-2)
问题解决了。使用不同的方法,我用PHP解析了url。