htaccess ではパラメータを使用したサブディレクトリへのアクセスが許可されません
P粉785905797
P粉785905797 2024-03-30 20:05:48
0
1
383

seo URL 用の htaccess を作成しようとしています。htaccess を作成しました。パラメーターを持つサブフォルダーを除いて、すべての URL が正常に動作し、サイト フォルダーにリダイレクトされます。

sitefolder は私のルート ディレクトリであり、すべてのファイルがそこにあります。

例: URL は次のようになります:

リーリー

htaccess では次のようになります:

リーリー

最初のパラメータは id で、2 番目のパラメータは slug ですが、これら 2 つの URL はどちらも url には入りません。

これは私の htacces コードのすべてです:

リーリー

これが subcat.php のパラメータを取得する方法です。エラー時にインデックスにリダイレクトしないので、php が原因ではないと思います:

ああああ

P粉785905797
P粉785905797

全員に返信(1)
P粉450079266

subcat.php が呼び出される場合 (コメントで述べたように)、.htaccess は問題ではありません。ただし、投稿したコードには index.php へのリダイレクト (または何らかのリダイレクト) はありません。

ただし、次の行では実行時エラーがあるようです:

リーリー

is_numeric() は、引数が数値かどうかをテストしてブール値を返すだけで、期待される変数の数値を返しません。したがって、q の値に関係なく、SELECT は常に失敗します (または最初の項目が返されます)。

指定した URL パラメータの実際の値を取得するには、次のようなものが必要になる場合があります:

リーリー

ただし、最初にこれらの URL パラメーター (つまり、$_GET 変数) が渡されていることを確認する必要があります。そうでない場合、スクリプトは E_NOTICE メッセージを発行します。


更新:

RewriteRule ディレクティブと競合します:

http://localhost/sitefolder/subcat/38/web-design をリクエストすると、リクエストを detail.php? に書き換える最初のルールによって捕捉されます。ご想像のとおり、subcat.php ではなく q=subcat/39&slug=web-design です。 q=subcat/39 が無効である可能性があるため、この に失敗する可能性があります (/sitefolder/ へのリダイレクトがトリガーされると思います)。

競合を避けるために、これらのルールの順序を変更するか、正規表現をより具体的にする必要があります。例えば。 q が数値 ID であると想定されている場合は、文字通り anything (.*) ではなく、数値 (\d ) のみと一致します。 )、それが現在一致しているものです。

正規表現には文字列の末尾アンカーも含める必要があります。そうしないと、これらのルールが書き換えられた URL にも一致し、不要なループが発生します。例えば:### リーリー

また、ここで

NC フラグを使用することにも疑問を持ちます。これは、contact-usCONTACT-US (およびすべてを許可することによって渡される可能性があるため)コンテンツ間)同じリソースにアクセスします。 ###まとめ###

つまり、ルールは次のようになります。

リーリー

(

\w

[a-zA-Z0-9_] の短縮文字クラスです。) 正規表現をより具体的にすることで、競合を回避できます。これらの命令は上から下に実行されます。最初に一致したルールが優先されます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!