2017-02-12 1 views
2

私のウェブサイトで.htaccessを使用して.php拡張子を削除しています。しかし、場合によっては「内部サーバーエラー」と表示されます。URLを書き換えて拡張子.htaccessを削除すると内部サーバーエラーが発生する

は、ここに私の.htaccessコードです:

AddHandler x-httpd-php5-6 .php 

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule productos/(.+)/? /prueba/listado-productos.php?category=$1 
RewriteRule productos/(.+)/(.+)/? /prueba/listado-productos.php?category=$1&subCategory=$2 
RewriteRule productos/(.+)/(.+)/(.+)/? /prueba/listado-productos.php?category=$1&subCategory=$2&product=$3 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

拡張子.phpを削除するには、URLを書き換えるためのコードは、最後の3行です。

私はフォルダを持っていると仮定はdirectoryと呼ばれ、ファイルがルートフォルダにabout.phpと呼ばれる:

example.com -----> works 
example.com/directory ----> works 
example.com/directory/ ----> works 
example.com/about ----> works 
example.com/about/ ----> internal server error 

が、私はこれをどのように修正することができますか?私はすべてを試しました!

+0

エラーログを確認して、エラーの内容を確認してください。 – SuperDuperApps

答えて

1

これをデバッグすると、たとえば次のようになります。リクエストは10の内部リダイレクトの制限を超え:LogLevel debug rewrite:trace2を設定し、あなたはそれが最終的に

AH00124で失敗するまで要求/about/が、そうで/about/.phpへ、そして再び/about/.php.phpへ、そして再び/about/.php.php.phpに書き換え、およびされていることがわかります設定エラーの可能性があります。

これを防ぐには、末尾にスラッシュがあると見なす追加のルールを使用します。このルールは既にお持ちのものとほぼ同じです

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)/$ $1.php [L] 

唯一の違いは、ルールのパターンの末尾にスラッシュがあります。これにより、/about//about/.phpの代わりに/about.phpに書き換えられます。したがって、ループする代わりに適切なスクリプトが見つかります。


ルールの数を最小限にするには、次のようにします。代わりに、これらの二つのルールの一つだけ、あなたも、このわずかに変更されたパターン

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*?)/?$ $1.php [L] 

を試してこのパターンは​​と/about/の両方に一致し、この方法、あなたは一度にそれを持っています。

+0

私にとって完璧に動作します。これは受け入れられる回答でなければなりません。オラフありがとう! – Silas

関連する問題