2011-12-02 3 views
1

私は基本的にRewriteRuleを使って.phpを隠すWebサイトを持っていて、スラッシュでパラメータを決定することもできます。PHP:htaccess:書き換えルールが存在しないページで500 ERRORを受け取っています

ですから、例えば: http://www.dealhandler.com/deals/san-jose/Living%20Social/233102

スクリプトは、社会生活、サン・ホセのようなパラメータにとるdeals.php、および取引IDです。ここで

は私の.htaccessです:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^dealhandler.com 
RewriteRule ^(.*)$ http://www.dealhandler.com/$1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)(.*)$ $1.php$2 [L,QSA] 

問題: 訪問者は、ルートレベルでスクリプトを持っていない無効なURLを入力した場合、私は500エラーを取得します。

例:http://www.dealhandler.com/idontexist 私が買ってあげる:

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. 

は、ルートレベルのファイルが存在しない場合は、現在の機能を維持したが停止し、リダイレクトするのに十分なスマートにする方法はありますか?

答えて

1

一見すると、与えられた名前のファイルが見つからないときはいつでも.phpを追加するように見えます。デバッグロギングをオンにすると、これを簡単に確認できるはずです。それだけは一度だけ または 2起こりますので、すでに、.PHPで終わらない文字列に.phpの追加

あなたの最良の選択肢、 1のいずれかにある))の潜在的な新規の.phpファイル名が存在するかどうかを確認別の条件であなたのRewriteRuleの前にこの権利を追加するすべての

1

の試みでルールを適用する前に:

RewriteCond %{REQUEST_URI} !^/[^/]+\.php 

(idontexist.phpのような)有効なPHPファイルにマップしていない要求は、単に返す必要があります404.

1

ここに無限ループを避けるべきことがあります:ファイルまたはディレクトリでない場合は最初にをテストし、 "php"で終わる場合はすぐに停止してください。ルールは続けていくと、独自のテストを試していない場合は、次の

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^dealhandler.com 
RewriteRule ^(.*)$ http://www.dealhandler.com/$1 [R=301,L] 

# if it's not a file... 
RewriteCond %{REQUEST_FILENAME} !-f 
# ... and it's not a dir... 
RewriteCond %{REQUEST_FILENAME} !-d 
# ...and it ends by "php" then stop: 
RewriteRule (.*)\.php$ - [L] 

# if it's not a file... 
RewriteCond %{REQUEST_FILENAME} !-f 
# ... and it's not a dir... 
RewriteCond %{REQUEST_FILENAME} !-d 
# ...rewrite it to php: 
RewriteRule ^([^/]*)(.*)$ $1.php$2 [L,QSA] 
0

ことはあなたの../apache/conf/httpd.confをチェックして、探し:ハッシュ記号(#)が表示された場合

#LoadModule rewrite_module modules/mod_rewrite.so 

最初の文字として削除し、保存してサーバーを再起動します。

関連する問題