次のことを行うフロントコントローラーがあります。
$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ページに送られません。これは、書き換え規則によるものです。
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 を取得しています。
これを解決するにはどうすればよいですか?