私は、Web サイトのルートで URL を書き換えようとしているプロジェクトに取り組んでいます。現在の .htaccess
は次のとおりです
私の Web サイトでは書き換えが有効になっています。 htaccess テスターでコードをチェックしたところ、正しい値が表示されました。
しかし、たとえば screenshot-of-the-week/screenshot/123
にアクセスすると、404 ページが表示されます。 今週のスクリーンショット/スクリーンショット/
にアクセスすると、正常に動作します。
また、「実際の」URL に手動でアクセスすると、期待どおりに動作します: screenshot-of-the-week/screenshot/index.php?id=123
何が問題なのか分からず、.htaccess
を別のフォルダーに移動し、もちろんパスを編集してみましたが、成功しませんでした。
他のトラブルシューティングのヒントを提供できる人はいますか?リダイレクトが実際にバックグラウンドで何を行っているかを確認するにはどうすればよいですか?
P粉2187759652024-01-17 17:55:15
このルールの「問題」は、書き換えられた URL とも一致する (具体的には、[^/]
は index.php
と一致する)ため、再度書き換えられることです。 /screenshot-of-the-week/screenshot/index.php?id=index.php
(id=123
パラメータはオーバーライドされます) まで時間がかかります。では、スクリプトは (Apache ではなく) 404 応答を生成すると予想されますか?
この問題を解決するには、正規表現をより具体的にするか、END
フラグ (Apache 2.4) を使用して、書き換えエンジンが余分なループ (および 2 回目の書き換え) を実行しないようにする必要があります。
この例では、数値を渡しています。そのため、数値のみを期待している場合は、数値のみが一致します。
###例えば:### リーリー末尾の
$ も正規表現に追加したことに注意してください。そうしないと、何でも
を URL に追加しても同じになるため、サイトが悪用される可能性があります。リソースは次のようになります。提供されました。 (元のルールに / を追加すると、同じ応答が生成されます。)
(
ファイルがドキュメント ルートにあるとします。)
にアクセスすると、ルールは処理されません (正規表現が一致しません)。 mod_dir は DirectoryIndex
ドキュメント (index.php
) を提供しますが、id
パラメータは提供しません。