mod_rewrite 已启用,但不起作用

Fre*_*ell 22 apache2 mod-rewrite

我正在尝试设置一个 PHP 路由库。他们给出了一个 .htaccess 文件的例子:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
Run Code Online (Sandbox Code Playgroud)

我无法让它工作,所以我尝试启用 mod_rewrite,但它显示“模块重写已经启用”。

为什么它不能正常工作?谢谢!我正在运行 Ubuntu Precise 12.04 和 apache2.2.22。(检查是否有任何更新)

编辑:更多细节,它是一个 PuPHPet vagrant 构建,应该启用重写。

Eve*_*mbH 40

您需要允许覆盖。

<Directory "/path/to/document/root/">
  AllowOverride All

</Directory>
Run Code Online (Sandbox Code Playgroud)

  • 这是不必要的宽容。有问题的配置只需要`AllowOverride`。`Allow from All` 与问题无关,可能不适合@randomdev 的环境。 (7认同)

met*_*rph 19

首先,将您的 httpd 配置设置为此(路径可能彼此不同。在我的 ubuntu 中,它位于 /etc/apache2/sites-available/default):

DocumentRoot /var/www

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Order allow,deny
    allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

之后,您应该使用以下命令启用 mod_rewrite

sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)

最后一个,重启你的apache服务:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

为确保这一点,您可以在配置> apache2handler > 加载模块中的phpinfo中再次检查它必须写入,这意味着启用了mod_rewrite。mod_rewrite


Dam*_*ica 5

我遇到了类似的问题,但其他答案对我没有帮助。开头的这一行.htaccess解决了我的问题:

Options +FollowSymLinks -MultiViews
Run Code Online (Sandbox Code Playgroud)