0

我有一个前端控制器执行以下操作:

$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/文件夹/登录

有用:

如果我访问:

http://localhost/文件夹/ $$$$

它会给我一个真正的 404(不是我的自定义 :P),而不是把我送到 404 页面。这是因为重写规则:

RewriteRule ^([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。

我该如何解决这个问题?

4

1 回答 1

-2

问题解决了。使用不同的方法,我用 PHP 解析了 url。

于 2012-05-11T12:46:37.890 回答