我正在尝试在 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 是在其下运行的用户。该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
在我的 httpd.conf 中的 DocumentRoot 声明中,mod_rewrite 可以正常工作。
答案4
我找到了这个问题的解决方案......
我在配置文件中将其 更改AllowOverride None
为AllowOverride all
Options Indexes FollowSymLinks
/etc/httpd/conf/httpd.conf
谢谢!