2012-05-04 9 views
9

は私の.htaccessファイルです:.htaccess - rewriteruleがtrueの場合は処理を停止しますか?ここ

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で

のApache/1.3.41サーバーポート80

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

[金5月4日午前1時54分19秒2012] [エラー] [クライアント109.109.109.109] mod_rewrite: 内部リダイレクトの最大数に達しました。構成エラーが発生すると想定します。必要に応じて制限を増やすには、 'RewriteOptions MaxRedirects'を使用します。

無限ループが何らかの形で生成されているとします。

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

(サイドノート。一般的には、私は絶対に恐ろしいことに.htaccessにそこにドキュメントを見つける。誰にも同様に感じている場合、私は疑問に思う。)事前に

感謝。

答えて

10
+1

私は、あなたのアドバイスを取り、最初のリライトルールは次のようになります。 'Rewriterule ^(。*)$ http://www.mysite.com/$1 [r = 301、nc、L]' すべてが正しく動作しているようです。 ありがとうございます。 – oyvey

+0

サイトを反復する必要はありません。そして、Apache RewriteRulesはデフォルトでは貪欲です。 ☞ 'RewriteRule(。*)$ 1 [R = 404、L]' –

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=301R=302を変更後、罰金働いていることを確認したら。

+0

ありがとうございました。私は実際にErrorDocument経由で悪いアドレスのリダイレクトを処理しましたが、正しくリコールすれば、それはPHPで終わるアドレスでは機能しませんでした。それが私が現在のコードに切り替えた理由です。 – oyvey

関連する問題