
Amazon Linux インスタンスで mod_rewrite を有効にしようとしています。ディレクトリ ディレクティブは次のようになります。
<Directory />
Order deny,allow
Allow from all
Options None
AllowOverride None
</Directory>
<Directory "/var/www/vhosts">
Order allow,deny
Allow from all
Options None
AllowOverride All
</Directory>
そして、httpd.conf のさらに下には、次のLoadModule
ディレクティブがあります。
... other modules...
#LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
#LoadModule proxy_module modules/mod_proxy.so
... other modules...
Wordpress に必要のない Apache モジュールはすべてコメントアウトしました。
それでも、http restart を発行して、ロードされたモジュールを確認すると、次の/usr/sbin/httpd -l
結果しか得られません:
[root@foobar]# /usr/sbin/httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
Wordpress サイトを含む仮想ホスト内には、次のものが.htaccess
含まれています。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
.htaccess は apache が所有しており、apache は apache の実行ユーザーです。このapachectl -t
コマンドは以下を返します。Syntax OK
私のは/etc/httpd/conf.d/vhosts.conf
こんな感じです:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName foobar.net
ServerAlias www.foobar.net
DocumentRoot /var/www/vhosts/foobar/
ErrorLog /var/www/vhosts/foobar/logs/error.log
CustomLog /var/www/vhosts/foobar/logs/access.log combined
</VirtualHost>
何が間違っているのでしょうか? 何を確認すべきでしょうか?
答え1
LoadModule ディレクティブはモジュールを動的にロードします。
RewriteEngine on
仮想ホストで を発行し、その後に を実行してapachectl -t
、モジュールが実際にロードされているかどうかを確認してください。
答え2
私はちょうど新しいAmazon Linuxを始めたところ、同じ問題が発生しました。Options FollowSymLink
そこにありましたが、次の行を次のAllowOverride None
ように変更する必要がありました。AllowOverride All
答え3
設定は正しかったのですが、
Options FollowSymLink
mod_rewrite が機能するためには、httpd.conf の DocumentRoot の宣言で次の行を追加します。
答え4
この問題の解決策を見つけました.....
設定ファイルで以下の
AllowOverride None
ように変更しましたAllowOverride all
Options Indexes FollowSymLinks
/etc/httpd/conf/httpd.conf
ありがとう!