理由はわかりませんが、.htaccess ファイルで次の RewriteRule を使用すると、Internal Server Error 500 が発生します。mod_rewrite が有効になっているので、一日中解決策を探していました。
# Enable Rewriting
RewriteEngine on
# Rewrite user URLs
RewriteRule ^(.*)/?$ users\/$1\/index.php
理由はわかりませんが、.htaccess ファイルで次の RewriteRule を使用すると、Internal Server Error 500 が発生します。mod_rewrite が有効になっているので、一日中解決策を探していました。
# Enable Rewriting
RewriteEngine on
# Rewrite user URLs
RewriteRule ^(.*)/?$ users\/$1\/index.php
Apache のエラー ログ (多くの場合 という名前errors.log
) には、動作しない理由に関する詳細情報が含まれている可能性があります。何らかの理由で正規表現が無効である可能性が高いです。自分でテストしてから、この投稿を編集します。
ほとんどの場合、500 エラーはリダイレクト ループが原因です。
そのURL自体を含めるようにANYリクエストを書き換えて、書き換えループに陥ります。users/$1/index.php
書き換えルールを次のように変更してみてください。
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/users
RewriteRule ^(.*)/?$ users/$1/index.php
URI が で始まっていないことを確認することで/users
、書き換えのループを回避できます。
内部書き換えループがあります。書き換えエンジンは URI を受け取り、それをエンジンに渡し、結果の URI を取得します。それらが同じ場合、書き換えエンジンは停止します。それ以外の場合は、返された URI を受け取り、エンジンを介して戻します。これは、あなたが再び/users/something/index.php
一致し、次のようになることを意味します: 、その後など.^(.*)/?$
/users/users/something/index.php/index.php
/users/users/users/something/index.php/index.phpusers/something/index.php/index.php
RewriteCond
したがって、URI が既に で始まっている場合に、URI が再書き換えされるのを防ぐために a を追加する必要がありますusers/
。
# Enable Rewriting
RewriteEngine on
# Don't rewrite if URI starts with "users"
RewriteCond %{REQUEST_URI} !users/
# Rewrite user URLs
RewriteRule ^(.*)/?$ users\/$1\/index.php