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