seo URL 用の htaccess を作成しようとしています。htaccess を作成しました。パラメーターを持つサブフォルダーを除いて、すべての URL が正常に動作し、サイト フォルダーにリダイレクトされます。
sitefolder
は私のルート ディレクトリであり、すべてのファイルがそこにあります。
例: URL は次のようになります:
リーリーhtaccess では次のようになります:
リーリー最初のパラメータは id で、2 番目のパラメータは slug ですが、これら 2 つの URL はどちらも url には入りません。
これは私の htacces コードのすべてです:
リーリーこれが subcat.php
のパラメータを取得する方法です。エラー時にインデックスにリダイレクトしないので、php が原因ではないと思います:
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-usと
CONTACT-US(およびすべてを許可することによって渡される可能性があるため)コンテンツ間)同じリソースにアクセスします。 ###まとめ###
リーリー
(\w
は[a-zA-Z0-9_]
の短縮文字クラスです。)
正規表現をより具体的にすることで、競合を回避できます。これらの命令は上から下に実行されます。最初に一致したルールが優先されます。