在 Amazon Linux 上启用 mod_rewrite

Lor*_*nzo 10 amazon-ec2 apache-2.2

我正在尝试在 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>
Run Code Online (Sandbox Code Playgroud)

然后在 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...
Run Code Online (Sandbox Code Playgroud)

我已经注释掉了 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
Run Code Online (Sandbox Code Playgroud)

在包含 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
Run Code Online (Sandbox Code Playgroud)

.htaccess 归 apache 所有,apache 是在其下运行的用户。该apachectl -t命令返回Syntax OK

我的/etc/httpd/conf.d/vhosts.conf看起来像这样:

<VirtualHost *:80>
     ServerAdmin foobar@gmail.com
     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>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我应该检查什么?

Jam*_*att 6

LoadModule 指令将动态加载模块。

尝试RewriteEngine on在虚拟主机中发出,然后apachectl -t确认天气是否实际加载了模块。


小智 5

我刚刚启动了一个新的 amazon linux 并且遇到了同样的问题并且在Options FollowSymLink那里但是下一行AllowOverride None必须更改为AllowOverride All


Lor*_*nzo 4

我的配置是正确的,但我需要

Options FollowSymLink
Run Code Online (Sandbox Code Playgroud)

在我的 DocumentRoot 在 httpd.conf 中的声明中,让 mod_rewrite 起作用。