14

ここに私の .htaccess ファイルがあります:

Options +FollowSymlinks
RewriteEngine on

Rewritecond %{http_host} ^mysite.com [nc]
Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc]

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . /404.php

最初の rewritecond / rewriterule ブロックは、ユーザーが www なしでアドレスを入力した場合にユーザーを www にリダイレクトすることです。

2 番目の rewritecond / rewriterule ブロックは、ユーザーが存在しないアドレスを入力した場合に、作成したページにユーザーをリダイレクトすることです。

これらのルールはそれぞれ独自に機能します。

.htaccess ファイルに最初のブロックしか含まれていない場合、www 以外のアドレスが www アドレスに正常にリダイレクトされます。

また、存在しないアドレスが入力された場合、ユーザーは私のページ 404.php に正常にリダイレクトされます。

ただし、.htaccess ファイルに両方のブロックが含まれ、www 以外のアドレスが入力された場合、www アドレスへのリダイレクトが成功する代わりに、次のことが起こります。

(1) ページに次のように表示されます。

恒久的に移動

文書はここに移動しました。

さらに、ErrorDocument を使用して要求を処理しようとしたときに、500 Internal Server Error エラーが発生しました。

mysite.com ポート 80 の Apache/1.3.41 サーバー

(2) エラー ログに次のエントリが生成されます。

[2012 年 5 月 4 日金曜日 01:54:19] [エラー] [クライアント 109.109.109.109] mod_rewrite: 内部リダイレクトの最大数に達しました。構成エラーを想定しています。必要に応じて、「RewriteOptions MaxRedirects」を使用して制限を増やします。

どういうわけか無限ループが発生していると思います。

最初の条件が満たされた場合にコマンドの処理を停止するように .htaccess ファイルに指示することで問題が解決するかどうか疑問に思っています。それで、誰もこれを行う方法を知っていますか?

(補足: 一般的に、.htaccess に関するドキュメントは非常に恐ろしいものだと思います。他の誰かが同じように感じているのではないかと思います。)

前もって感謝します。

4

3 に答える 3

18

[L]フラグ。

http://httpd.apache.org/docs/2.4/rewrite/flags.html

于 2012-05-04T08:05:19.563 に答える
3

代わりにこのコードを試すことができますか:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

ErrorDocument 404 404.php

Rewritecond %{HTTP_HOST} ^mysite\.com$ [NC]
Rewriterule ^ http://www.mysite.com%{REQUEST_URI} [R=302,NC,L]

正常に動作していることを確認したら、に変更R=302R=301ます。

于 2012-05-04T08:47:13.617 に答える