PHP 8 に移行した後、htaccess 書き換えルールが機能しない
P粉274161593
P粉274161593 2023-09-01 15:19:38
0
1
566
<p>PHP 7 から PHP 8 に移行した後、URL 書き換えルールに関する問題が発生しました。 </p> <p>htaccess の上に次のコードがあります</p> <pre class="brush:php;toolbar:false;">オプション FollowSymLinks リライトエンジンがオン RewriteBase /baba/ エラードキュメント 404 http://localhost/baba/404.php</pre> <ol> <li>検索ページ:-</li> </ol> <p>次のルールを使用するだけでうまく機能します。 -</p> <pre class="brush:php;toolbar:false;">RewriteRule ^s/([\w-] )/(.*)$ search.php?feq=$1&key=$2 [QSA,L ]</pre> <p>しかし、以下のようなルールをさらに追加すると、これらのページは 404 になります。 </p> <pre class="brush:php;toolbar:false;">RewriteRule ^s/([\w-] )/(.*)/(.*)$ search.php?feq=$1&city= $2&key=$3 [QSA、L] RewriteRule ^s/([\w-] )/(.*)/(.*)/(.*)$ search.php?feq=$1&pro=$2&city=$3&key=$4 [ QSA、L] <ol start="2"> <li>ランディング ページ:-</li> </ol> <p>次のルールを使用するだけでうまく機能します。 -</p> <pre class="brush:php;toolbar:false;">RewriteRule ^([\w-] )$ land.php?name=$1 [QSA,L]</pre> <p>しかし、以下のようなルールをさらに追加すると、CSS と画像が他のページで読み込まれなくなり、それらのページでは 404 が発生します。 </p> <pre class="brush:php;toolbar:false;">RewriteRule ^([\w-] )/(.*)/(.*)$ land.php?name=$1&pro=$2& ;city=$3 [QSA,L] RewriteRule ^([\w-] )/(.*)$ land.php?name=$1&key=$2 [QSA,L] RewriteRule ^([\w-] )/(.*)/(.*) land.php?name=$1&city=$2&key=$3 [QSA,L] RewriteRule ^([\w-] )/(.*)/(.*)/(.*)$ land.php?name=$1&pro=$2&city=$3&key=$4 [QSA, L]

P粉274161593
P粉274161593

全員に返信(1)
P粉022501495

これは 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 に対する相対であることを示すことができます。ただし、これには注意点がないわけではありません。)

紛失した資産に関する詳細情報:

  • htaccess での URL の書き換え結果に CSS と画像がありません
  • 404 見つかりません - CSS へのリンク、画像が壊れています
  • .htaccess ファイル URL 書き換えルール後の JS および CSS レンダリングの問題
また、「ランディング ページ」ルールは「検索ページ」ルールの後に

配置する必要があることにも注意してください。そうしないと、これらのルールも競合します。この競合も、正規表現をより具体的にすることで回避できます。たとえば、「ランディング ページ」の最初のパス セグメント (name URL パラメーターの値) を 1 文字以上ではなく 2 文字以上に設定することで、# との競合を回避します。 /### (検索中)。

ナレーション:

これにより、404 エラー ドキュメントへの 302 (一時的) リダイレクトがトリガーされます (404 応答と、実際に 404 をトリガーした URL がマスクされます)。非常に具体的な要件がない限り、これは一般的にお勧めできません。通常、ここではルート相対 URL パスを使用する必要があります。例えば:### リーリー

/baba/404.php

は内部サブリクエストを介して提供され、エラー ドキュメント自体はエンド ユーザーに公開されません。

リダイレクトを使用してリソース不足の問題を解決している場合は、HTML ソース コードで相対 URL を使用しないことについて上記を参照してください。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート