htaccessが効かない!
Basic認証やリダイレクトができない!
エラーが出る!
そんな悩みにお答えします。
htaccessの設定って難しいですよね。
私もとても苦戦した記憶があります。
今回はそんな時に確認するべき7つのポイントを初心者の方でもわかりやすく解説します。
また、今回紹介した方法でも解決しないという方は、気軽にお問い合わせください。
環境
WebサーバーはApacheを使っていることとします。
また、Apacheの設定ファイルや一部のコマンドはOSによって下のように異なります。
OS | 設定ファイル | 再起動コマンド |
Ubuntu、Raspbianなど | /etc/apache2/apache2.conf | systemctl restart apache2 |
CentOSなど | /etc/httpd/conf/httpd.conf | service httpd restart |
ご自身の環境に合うものを選択してください。
htaccessが効かない、エラーが出る時に確認する5つのポイント
今回の設定に限らず、Apacheの設定を変更した場合は必ずApacheを再起動してください。
設定を反映させるためです。
#どちらかを選択
sudo systemctl restart apache2
service httpd restart
AllowOverWriteの設定
Apacheの設定ファイルを開きます。
#どちらかを選択
sudo nano /etc/apache2/apache2.conf
sudo nano /etc/httpd/conf/httpd.conf
下の方を見ると下のような項目があります。(全く同じでなくても大丈夫です。)
Apache2の場合
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
httpdの場合
<Directory />
AllowOverride None
</Directory>
AllowOverride NoneをAllowOverride Allに変更します。
ファイルを保存してApacheを再起動します。
ファイルの保存方法
- Ctrl + O
- Enter
- Ctrl + X
Rewriteモジュールの有効化(Apache2のみ)
この方法はかなり有効です。
下のコマンドを実行してください。
sudo a2enmod rewrite
このようなログが出ます。
Enabling module rewrite.
To activate the new configuration, you need to run:
systemctl restart apache2
「Apacheを再起動してね」と言っているので、再起動しましょう。
そしたらもう一度実行して、Module rewrite already enabledとなればOKです。
③ 全角文字の削除
htaccessは日本語や他の全角文字があると効かないことがあります。
特に全角スペースは見つけにくいので注意が必要です。
どこに全角スペースがあるのかわからない方はファイルを作り直すという方法もあります。
パーミッションの変更
htaccessやhtpasswdファイルはパーミッションが604でないと効きません。(644の場合もあります)
以下のコマンドを実行します。
chmod 604 .htaccess
できない時はsudo
をつけて実行してみてください。
エラーが出る時の対処
500エラーが出る場合はhtaccessの記述ミスやサーバー内でのエラーの可能性があります。
また、Apacheを再起動した際に下のようなログが出ることがあります。
Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
構文エラーが発生しているため、この状態ではApacheを再起動することができません。
そのため、次のコマンドを実行してエラー箇所を特定します。
#どちらかを選択
apachectl configtest #Apache2の場合
service httpd configtest #httpdの場合
ログの例
AH00526: Syntax error on line 15 of /etc/apache2/apache2.conf:
Invalid command 'ABC', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
この場合、「/etc/apache2/apache2.confの15行目に構文エラーがあるよ」という意味です。
設定ファイルにABCという関係のない文字を打ち込んでしまったのが原因でした。
問題は解決したでしょうか。
まだ問題が解決したいという方は、TwitterのDMから気軽にお問い合わせください。
コメント