.htaccessファイルに次のものがあります。
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内部サーバーエラーを作成します。
誰かが私がどこで間違っているのか知っていますか?
コードは無限のループを引き起こしているため、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]
上記のコードには追加のRewriteCond %{REQUEST_FILENAME} !-f
があり、/directory/index.php
が有効なファイルになるため、初回以降のRewriteRuleの実行を確実に禁止します。
同じ問題が発生しましたが、私の場合、「書き換え」モジュールがまだ有効になっていないことがわかりました。だから私はそれを有効にしてからApacheサーバーを再起動する必要があります:
これが誰にでも役立つことを願っています。
前面にスラッシュを追加してみてください。
RewriteRule ^/directory/(.*)$ directory/index.php?id=$1
私は前にそれに巻き込まれたことがあります。
または、RewriteLogとRewriteLogLevelを使用してデバッグし、Apacheエラーとアクセスログで詳細を確認します。
RewriteLogLevel 3
RewriteLog ${Apache_LOG_DIR}/rewrite.log
これにより、Apacheログディレクトリにログファイルが残ります。私の場合、それは/var/log/Apache
CodeIgniterを使用していて、エラーの問題が発生している場合500。解決策に従ってください。
したがって、CodeIgniterでURLのセグメント「index.php」を削除するには、2つのことを行う必要があります。 1つ目は、/system/application/config/config.php
ファイルを編集して、index_pageポリシーの値を空に変更することです。
$config['index_page'] = '';
2番目のステップは、ファイル.htaccess
を作成することです。
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
以上です!今後、CodeIgniterで作成されたサイト/システムのURLには、「index.php」というスレッド(「迷惑」と呼ばれることもあります)がなくなります。