seo URL 用の htaccess を作成しようとしています。htaccess を作成しました。パラメーターを持つサブフォルダーを除いて、すべての URL が正常に動作し、サイト フォルダーにリダイレクトされます。
sitefolder
は私のルート ディレクトリであり、すべてのファイルがそこにあります。
例: URL は次のようになります:
リーリーhtaccess では次のようになります:
リーリー最初のパラメータは id で、2 番目のパラメータは slug ですが、これら 2 つの URL はどちらも url には入りません。
これは私の htacces コードのすべてです:
リーリーこれが subcat.php
のパラメータを取得する方法です。エラー時にインデックスにリダイレクトしないので、php が原因ではないと思います:
P粉4500792662024-03-31 14:53:01
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/
へのリダイレクトがトリガーされると思います)。 < /p>
競合を避けるために、これらのルールの順序を変更するか、正規表現をより具体的にする必要があります。例えば。 q
が数値 ID であると想定されている場合は、文字通り anything
(.*) ではなく、数値 (\d < /code>) のみと一致します。 )、それが現在一致しているものです。
正規表現には文字列の末尾アンカーも含める必要があります。そうしないと、これらのルールが書き換えられた URL にも一致し、不要なループが発生します。例えば:### リーリー
また、ここでNC フラグを使用することにも疑問を持ちます。これは、
contact-us と
CONTACT-US (およびすべてを許可することによって渡される可能性があるため)コンテンツ間)同じリソースにアクセスします。 < 来创建重复内容问题/code>
###まとめ###
\w
は[a-zA-Z0-9_] の短縮文字クラスです。)
正規表現をより具体的にすることで、競合を回避できます。これらの命令は上から下に実行されます。最初に一致したルールが優先されます。