1

だから私には2つのルールがあります。各ルールは、.htaccessそれ自体である場合に正確に実行されますが、両方のルールが存在する場合、それらは互いに競合し始めます。

RewriteCond %{REQUEST_URI} ^(.*)\.html$
RewriteRule ^(.*)\.html$ index.php?id=$1 [QSA,L]

上記のルールは、番号がで終わる場合にのみ、発言権を取得して番号をhttp://domain.com/12.html渡すために正常に機能します(メモファイルは存在しません!)12index.php .html12.html

RewriteCond %{REQUEST_URI} !^(.*)\.html$
RewriteRule ^(.*)$ /$1\.html [L,R=301]

これは、URLが。で終わるかどうかを確認するために正常に機能します.html。また、で終了しない場合.htmlは、URI +にリダイレクトされます.html(これはそれ自体でも正常に機能します)。

1つに両方のルールがある場合.htaccess

RewriteCond %{REQUEST_URI} ^(.*)\.html$
RewriteRule ^(.*)\.html$ index.php?id=$1 [QSA,L]

RewriteCond %{REQUEST_URI} !^(.*)\.html$
RewriteRule ^(.*)$ /$1\.html [L,R=301]

次に、リダイレクトループが発生するループがあります。

誰かが私がどこで間違っているのか指摘できますか?

4

1 に答える 1

1

したがって、最初のルールはに書き換えhttp://domain.com/12.htmlられhttp://domain.com/index.php?id=12ます。その後、物事はうまくいかなくなり始めます。2番目のルールはそれをに書き換えますが、その時点で、最初のルールが再び開始され、2番目のルールがhttp://domain.com/index.php.html?id=12に書き換えられるようなものに書き換えられることがわかると思います。この時点で、ルールはURLをめぐって争うことになります。http://domain.com/index.php?id=index.phphttp://domain.com/index.php.html?id=index.php

最も簡単な解決策は、おそらく、2番目の書き換えルールを微調整して、すでに拡張子が含まれているページを書き換えないようにすることです。つまり、[^.]*の代わりにを使用し.*ます。

于 2012-10-22T10:50:13.613 に答える