0

既存の URL と競合する htaccess URL 書き換えルールに遭遇しました。

  1. カテゴリ ページを www.mydomain.com/categoryname.html に書き込むには

    私は正常に動作している次のルールを使用していますが、www.mydomain.com/about.html のような他のすべてのページで 404 not found が表示されます

    RewriteRule ^([^/]*)\.html$ /category_parent.php?ctg=$1 [L]
    
  2. www.mydomain.com/25/productname.html のような製品ページを作成するには

    私は次のコードを使用していますが、これも正常に動作しています

    RewriteRule ^([^/]*)/([^/]*)\.html$ /product.php?id=$1&url=$2 [L]
    

    しかし、上記の書き換えルールは、次のコードを使用しているサブカテゴリページと競合しています:

    RewriteRule ^([^/]*)/([^/]*)\.html$ /category_child.php?pctg=$1&ctg=$2 [L]
    

手短に言えば、私が書きたいのは、

www.mydomain.com/categoryname.html

www.mydomain.com/categoryname/subcategoryname.html

www.mydomain.com/25/productname.html

しかし、いくつかのルールが互いに干渉しています。これについて少し手がかりを教えていただければ幸いです。

4

1 に答える 1

0

ファイルが存在しないものと存在するものを衝突させている場合は、条件を使用して、ファイル、ディレクトリ、またはシンボリック リンクが存在するかどうかを確認する必要があります。

ファイルの場合:

RewriteCond %{REQUEST_FILENAME} !-f

フォルダの場合:

RewriteCond %{REQUEST_FILENAME} !-d

シンボリック リンクの場合:

RewriteCond %{REQUEST_FILENAME} !-l

感嘆符は、ファイルが存在しない場合はルールを適用し、存在する場合はルールを適用しない!という意味を否定するために使用されます。!-f

a の後に a を付ける必要があり、ごとに 1 つ以上の条件を指定できることRewriteCondに注意してください。次に例を示します。RewriteRuleRewriteRule

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]*)\.html$ /category_parent.php?ctg=$1 [L]

この場合、ディレクトリが存在せず、ファイルも存在せず、シンボリック リンクも存在しない場合はリダイレクトされますが、前の条件のいずれかが存在する場合はリダイレクトされません。

于 2013-08-13T07:02:17.093 に答える