web-dev-qa-db-ja.com

localhostでRewriteRuleを使用した後に404エラーを返す

localhost/projects/project1/page/xの代わりにlocalhost/projects/project1/index.php?page=xを使用したいと思います。しかし、RewriteRuleを使用して.htaccessのURLをリダイレクトした後、404エラーページが返されました。

ここに私のコードがあります:

ErrorDocument 404 /projects/project1/pagenotfound.php

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^projects/project1/page/([0-9]*)$ /projects/project1/index.php?page=$1 [L,QSA,NC]

溶液

ErrorDocument 404 /projects/project1/pagenotfound.php

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([0-9]*)$ /projects/project1/index.php?page=$1 [L,QSA,NC]
5
Márton Juhász

私の.htaccessはindex.phpと同じディレクトリにあるため、localhost/projects/project1/.htaccess

それが問題です。あるいは、あなたの見方によっては、RewriteRuleパターンが問題です。

.htaccess(ディレクトリごと)ファイルでは、パターンごとに一致する前に、ディレクトリごとのプレフィックスが最初にURLから削除されます。したがって、.htaccessファイルが/projects/project1/.htaccessにある場合、RewriteRuleパターンは最初から/projects/project1/を除外する必要があります(同じ理由で、/プレフィックスをドキュメントルートにあるときのパターン)。言い換えると...

RewriteRule ^page/([0-9]*)$ /projects/project1/index.php?page=$1 [L,QSA,NC]

または、.htaccessファイルをドキュメントルートに移動します。

1
MrWhite