.htaccess書き換えルールの予期しない動作
URLパスをindex.phpクエリパラメータに変換するために、いくつかの.htaccess書き換えルールを実行しています。
だから基本的に誰かが訪問したときhttps://example.com/electionsURLをに変換しますhttps://example.com/?page=elections
Options -Indexes
RewriteEngine on
# Ignore extensions
RewriteCond %{REQUEST_URI} !\.(css|js|jpg|png|gif|svg|pkg)$ [NC] RewriteRule ^([^/]+/[^/]+/). $1 [R=301,L]
# Rewrite
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)$ /index.php?page=$1 [L,QSA]
これはうまくいきます!問題は1つだけです。これは、訪問者が入力したURLにスラッシュが3つ以上ある場合の予期しない動作です。
だから誰かが訪問したときhttps://example.com/one/two/threeURLをに変換しますhttps://example.com/C:/xampp/htdocs/project/test/test/(ローカルホストテスト)。
この予期しない動作の代わりに通常の404を返すようにするにはどうすればよいですか?
(2つのスラッシュではそれができないので奇妙です)
回答
anubhava
将来の訪問者が解決策を見つけやすいように、私のコメントを回答に変換します。
問題は301
、この不要なリダイレクトを引き起こした最初のエラーと、間違ったターゲットURLへのリダイレクトが原因です。
このコードは.htaccessに保存できます。
Options -Indexes
RewriteEngine on
# Rewrite
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/?$ index.php?page=$1 [L,QSA]
古いブラウザのキャッシュを回避するために、ブラウザのキャッシュをクリアした後にテストするか、新しいブラウザでテストしてください。