2

apache mod_rewrite過去 6 か月間エラーなしで使用しているサイトがあります。

次の書き換えルールがあります。

RewriteRule ^products/([a-z\-]+)/$ /products.php?category=$1 [NC,L]

ここに私のページのコードがありますproducts.php

$category = $_GET['category'];

if (isset($category)) {
    // do some processing here
}
else {
    header("Location: /500.html");
    exit;
}

このルールに該当するリンクの例は次のとおりです。/products/lighting-poles/

実際の書き換えがまだ行われているのに、にマッピング([a-z\-]+)されていない理由を知っている人はいcategory=$1ますか?

追加情報

.htaccessホスト上のファイルで行がコメントアウトされていることに気付いたOptions +FollowSymLinksので、最初にこれを再度有効にして、サイトが apache の白い画面500エラーを返すようにしました。

.htaccess ファイルの詳細

<IfModule mod_rewrite.c>
#Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Add a trailing slash to paths without an extension
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^(.*)$ $1/ [L,R=301]

# other rules including problem rule here

</IfModule>
4

1 に答える 1

3

これは病的にマルチビューの問題のように聞こえます。マルチビューはコンテンツ ネゴシエーションです。有効にすると、URL にマップするファイルを見つけるために、URL ファイル マッピング パイプラインでいくつかの異なる追加機能が試行されます。ここには のような URL があり/products/blahますが、 というファイルがあるproducts.phpため、マルチビューは にマップしようとする可能性がありproductsます/products.php/blahcategoryしたがって、書き換えルールを完全にバイパスすると、パラメーターは表示されません。

オプションがある場所に、次を追加してみてください。

Options -Multiviews
于 2013-04-24T02:46:48.733 に答える