2011-08-16 10 views
1

私はこれを2時間行っていましたが、やっと私は諦めました。

私は2つの条件があります:?

1.ユーザー要求のphpファイルをリダイレクトする場合は、CMS/index.phpを要求= $ 1
2. PHPは異なるユーザ要求何か(PNG、CSS、JPG)は、CMSをリダイレクトする場合は/ウェブサイト/ $ 1

最初のルールは機能しますが、2番目のルールを適用できませんでした。ユーザーが/cms/style.cssをリクエストすると、Apacheはcms/website/style.cssをリダイレクトし、cms/website/website/style.cssをリダイレクトしてループします。htaccessリダイレクト(ループ)の問題

私のhtaccessファイルは、そのようなものです:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*\.php) /cms/index.php?request=$1 [L] 
RewriteRule (.*\.!(php)) /cms/website/$1 [R,L] 

注:私は最後の正規表現が真であるか、ないことをわかりません。そして、それは500のerror_log出力を返し、それは確かに難しいので

"[Tue Aug 16 16:26:11 2011] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace." 
+0

Apacheのログは試行錯誤がたくさんありますが、その二番目のルールが無限に見えている - それが一致した場合。すべてのルールは、リダイレクト( '[R]')の後に再び実行され、 '/ cms/website/$ 1'はルールに再度一致し、/ cms/website/cms/website/$ 1に再度転送されます。 –

+0

@robin、実際には[RewriteLooping](http://wiki.apache.org/httpd/RewriteLooping)は、[R]を使用するとループしてはいけないと言います。ただし、このオプションを設定してもループします。 –

答えて

1
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !(.*)\.php$ 
RewriteRule (.*)\.(.*)$ /cms/website/$1 [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} (.*)\.php$ 
RewriteRule (.*)\.php /cms/index.php?request=$1 [L] 
+0

ありがとう!それは動作しますが、問題の内容を理解できませんでした。あなたは[R、L]が私の古いhtaccessでうまくいかなかった理由を知っていますか? –

+0

@burak emreいいえ、私も[L] Flagを使って問題があります! – undone