P粉0225014952023-09-02 09:45:36
これは PHP のバージョンとは関係ありません - ルールは明らかに矛盾しています...
最初のルールの正規表現は一般的すぎるため (/s/foo/
と一致します)、単純に 2 番目のルールを追加すると、最初のルールはすべてのリクエストがキャプチャされます。パスセグメントの数に関係なく、search.php?feq=foo&key=
として書き換えられます。正規表現をより具体的にする必要があります。たとえば、文字通り any ではなく、パス セグメント全体のみに一致する場合:
.
(任意) ではなく、[^/]
(/
以外の任意) に注意してください。必須のパス セグメントで
(1 つ以上) を使用することもできます。
元のルールと同様に、key
URL パラメーター (つまり、最初のルールの 2 番目のパス セグメントと後続のルールの最後のパス セグメント) は optional です。これは意図的なものですか?
これらの URL パラメーターで使用できる文字がわかっている場合は、正規表現でこれらの文字を指定して URL をさらに制限する必要があります。そうしないと、(誤って) 書き換えられてしまいます。
指示の順序を逆にして、当面の問題を解決することもできますが、正規表現がまだ汎用的すぎるため、これは部分的な解決策にすぎません。
###上記のように。ただし、クライアント側の HTML でこれらのリソースの相対 URL パスを使用すると、CSS および画像のエラーが発生する可能性があります。異なるパスの深さからリクエストを書き換えているため、静的リソースのルート相対 (または絶対) URL を使用する必要があります。相対 URL は、ブラウザのアドレス バーの URL を基準にして (ブラウザによって) 自然に解決されます。(回避策として、
head セクションの
base 要素を設定して、すべての相対 URL がベース URL パス
relative に対する相対であることを示すことができます。ただし、これには注意点がないわけではありません。)
配置する必要があることにも注意してください。そうしないと、これらのルールも競合します。この競合も、正規表現をより具体的にすることで回避できます。たとえば、「ランディング ページ」の最初のパス セグメント (name URL パラメーターの値) を 1 文字以上ではなく 2 文字以上に設定することで、# との競合を回避します。 /### (検索中)。
これにより、404 エラー ドキュメントへの 302 (一時的) リダイレクトがトリガーされます (404 応答と、実際に 404 をトリガーした URL がマスクされます)。非常に具体的な要件がない限り、これは一般的にお勧めできません。通常、ここではルート相対 URL パスを使用する必要があります。例えば:### リーリー
/baba/404.phpは内部サブリクエストを介して提供され、エラー ドキュメント自体はエンド ユーザーに公開されません。
リダイレクトを使用してリソース不足の問題を解決している場合は、HTML ソース コードで相対 URL を使用しないことについて上記を参照してください。