0

これが私のリライトコードです:

    RewriteEngine On
    RewriteBase "/"
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
    RewriteRule (.*)$ http://www.whatever.com/$1/ [R=301,L]

    RewriteRule ^(.*)$ index.php/$1 [L]

これは、式エンジンサイト用です。これらの2行を削除すると、サイトは正常に機能します。

    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
    RewriteRule (.*)$ http://www.whatever.com/$1/ [R=301,L]

これらは、Googleでの重複したインデックス作成を回避するために、URLに末尾のスラッシュがない場合に、末尾のスラッシュを追加するために追加した行です。ログファイルに次のエラーが発生します:リクエストがl「設定エラーの可能性があるため、内部リダイレクトの制限10」を超えました

RewriteCondを正しく処理せず、無限ループに入っていると思います。なぜこれが起こっているのかについて何か考えはありますか?

4

3 に答える 3

1

これが私のExpressionEngine.htaccessで、末尾のスラッシュを削除します。好みがあるかどうかはわかりませんが、スラッシュがないと見栄えが良くなると思います。

RewriteEngine on

# get rid of trailing slashes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php) [NC]
RewriteRule ^(.+)\/$ /$1 [L,R=301]

# no plain index.php either
RewriteRule ^(index\.php)$ / [L,NC,R=301]

# rewrite index.php
RewriteCond $1 !^(images|system|themes|favicon\.ico|robots\.txt|index\.php) [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]
于 2011-03-16T03:36:00.677 に答える
0

Rewriteロギングをオンにします(RewriteLogLevel 3またはそうする必要があります)。ほとんどの場合、リクエストがの間でバウンスされるのがわかります。

 www.whatever.com/blah
 www.whatever.com/blah/
 www.whatever.com/blah
 www.whatever.com/blah/
 www.whatever.com/blah
 www.whatever.com/blah/
 etc....
于 2011-03-02T16:38:07.057 に答える
0

まず、原則:書き換え後、ルールセット全体が最初から処理されます。フラグはこれ[L]を妨げません。ルールが現在の実行の最後であるかどうかを制御します。

この場合、問題は最後のルールです。次のように書き換えます。

foo → index.php/foo → index.php/index.php/foo → ...

2行を削除すると、このルールに!-f条件!-dが付加され、ループが防止されます。

行のグループ化から、これら2つの条件を以下のすべてのルールに添付するように見えます。それはできませんが、代わりに、処理を停止するルールに反対の条件を付加することができます。

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
于 2011-03-02T18:37:17.257 に答える