1

以下の mod の書き換えは機能しません。たとえば、http://www.mywebsite.com/category/generalのような URLでは .. 404 エラーが発生します。

RewriteEngine On
RewriteBase /
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)&g=([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type=$2&r=$3&g=$4&page=$5 [L]

以下の mod の書き換えを使用すると、すべての組み合わせを入力するよりも良い方法があるはずです。

RewriteRule ^category/([A-Za-z0-9-]+)/?$ /category.php?c=$1 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type=$2 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&page=$2 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type=$2&page=$3 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)/?$ /category.php?c=$1&r=$2 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type$2&r=$3 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&r=$2&page=$3 [L]
RewriteRule ^category/([A-Za-z0-9-]+)&type=([A-Za-z0-9-]+)&r=([A-Za-z0-9-]+)&g=([A-Za-z0-9-]+)&page=([A-Za-z0-9-]+)/?$ /category.php?c=$1&type=$2&r=$3&g=$4&page=$5 [L]
4

1 に答える 1

1

最初のルール セットでは、すべての引数が存在する必要があるため、サンプル URL でトリガーされることはありません。最初のルールは「「カテゴリ/」の後に単語があるだけ」の状況を処理するため、2 番目のルール セットはあなたの例で機能しているように見えます。

単一のルールが必要な場合は、次を試してください。

RewriteEngine On
RewriteBase /
RewriteRule ^category/([A-Za-z0-9-]+)(&type=([A-Za-z0-9-]+))?(&r=([A-Za-z0-9-]+))?(&g=([A-Za-z0-9-]+))?(&page=([A-Za-z0-9-]+))?/?$ /category.php?c=$1&type=$3&r=$5&g=$7&page=$9 [L]

または、すべての引数が直接マップされているように見えるため:

RewriteEngine On
RewriteBase /
RewriteRule ^category/([A-Za-z0-9-]+)(&type=[A-Za-z0-9-]+)?(&r=[A-Za-z0-9-]+)?(&g=[A-Za-z0-9-]+)?(&page=[A-Za-z0-9-]+)?/?$ /category.php?c=$1&type=$2&r=$3&g=$4&page=$5 [L]

どちらも、a) 「category/」の後に常に最初のビットがあり、b) 残りのオプションは混合して一致させることができますが、常に同じ順序になると想定しています。必要に応じて将来拡張できることを意味するため、2 番目の方が優れています。最初のものは後方参照が不足しています ($9 を使用します)。

于 2012-05-19T14:22:02.933 に答える