2013-06-14 21 views
8

I私の.htaccessファイルに以下があります。のRewriteRule 500内部サーバーエラー

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule ^directory/(.*)$ directory/index.php?id=$1 

は、私は何を達成しようとしていることはこれです:URL www.mydomain.com/directory/10が訪れている

、ページwww.mydomain.com/directory/?id=10 URLの外観を変えずにブラウザに表示されます。

上記のコードは500内部サーバーエラーを作成します。

誰かが間違っていると知っていますか?

+2

一般に、500エラーは、どこかにエラーが記録されていることを意味します。 ApacheとPHPのエラーログを見つけて、実際のエラーの内容を確認してください。 – IMSoP

+5

ブラウザに配信された500エラーにより、完全なエラーメッセージがサーバーログに記録されるはずです。それらを読みます。 – Quentin

答えて

16

あなたのコードは無限ループを引き起こしているため、500内部サーバーエラーを生成することが保証されています。あなたの一致するURIパターンは、次のとおりです。^directory/(.*)$

書き換え前後のURLと一致するのは、理由です。そして、一度それが最大許容内部リライトの限界に達すると、Apacheは500の内部サーバーエラーを投げつけて、退屈になります。

はこれにあなたのコードを変更

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^directory/(.*)$ /directory/index.php?id=$1 [L,QSA,NC] 

コードの上に/directory/index.phpが有効なファイルになりますので、最初の時間の後のRewriteRuleのその後の実行を禁止することを確認します余分なRewriteCond %{REQUEST_FILENAME} !-fを持っています。

+1

それは素晴らしいです!ありがとうございました。 – Tom

+0

あなたは喜んで、うまくいきました。 – anubhava

+1

書き換えルール自体も参照していることに気付かなかったことを付け加えたいと思います。書き換え条件を追加すると問題が解決しました。はっきりと見落としやすいもの。 –

1

あなたは前にスラッシュを追加してみてくださいする必要があります

RewriteRule ^/directory/(.*)$ directory/index.php?id=$1 

私は前と見破られてきました。

はまた、デバッグにはRewriteLogとRewriteLogLevelを使用し、さらに情報のためのApacheのエラーログとアクセスログを見て:Apacheのログディレクトリにログファイルを残します

RewriteLogLevel 3 
RewriteLog ${APACHE_LOG_DIR}/rewrite.log 

。私のケースでは/var/log/apache

+0

これはサーバーエラーをソートしましたが、 '要求されたURL /ディレクトリ/ 10はこのサーバー上に見つかりませんでした。 ' – Tom

+0

さて、書き換えが一致しないように聞こえるようになりました。 –

+0

vhostにRewriteLogを追加します(.htaccessでは有効ではありません)。書き込もうとしているログファイルを指定します。私は例を使って答えを編集しました。 –

9

私は同じ問題を抱えており、私の場合は「書き換え」モジュールがまだ有効になっていないことがわかりました。だから私はそれを有効にして、Apacheサーバを再起動する必要があります。

  • モジュールを "書き換え" を有効にします。sudoは
  • を書き換えa2enmod次に、Apacheサーバを再起動します。sudoのサービスapache2の再起動

希望をこれは誰にも役立つでしょう。

+0

素晴らしい...これは私の問題でした.... –

0

CodeIgniterを使用していて、エラーが発生している場合は、500が表示されます。解決方法に従います。

CodeIgniterのURLのセグメント "index.php"を削除するには、2つのことを行う必要があります。最初は空にしindex_pageポリシーの値を変更し、/system/application/config/config.phpファイルを編集することです:

$config['index_page'] = ''; 

第二段階では、ファイル.htaccess

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ index.php/$1 [L] 

を作成することであり、それはそれです!これからCodeIgniterで作成されたサイト/システムのURLには、「index.php」というスレッド(いくつかは「迷惑」と呼ばれる)がなくなります。

関連する問題