mod_rewrite 已启用,但不起作用

mod_rewrite 已启用,但不起作用

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

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

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

编辑:还有一些细节,这是一个 PuPHPet vagrant 构建,应该启用重写。

答案1

您需要允许覆盖。

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

</Directory>

答案2

首先,设置你的 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>

之后你应该启用 mod_rewrite使用以下命令:

sudo a2enmod rewrite

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

sudo service apache2 restart

为了确保,你可以再次检查php信息配置 > apache2handler > 已加载模块那里必须有写mod_rewrite,说明 mod_rewrite 已启用。

答案3

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

Options +FollowSymLinks -MultiViews

答案4

在我的例子中,我将一个站点从另一个分区移到了 Apache 的分区,但我必须为指向此文件夹的旧位置创建一个符号链接。问题是 DocumentRoot 没有更新,一直指向旧路径,现在是一个链接。

附言:这不是一个商业网站,而只是一个供“国内”使用的内部网。

因此 MOD_REWRITE 停止工作,因为文档根目录不是指向新的文件夹路径,而是指向链接末端。

[ partition A (Apache) ] <-- Folder moved  <-- [ FOLDER partition B ]

[ partition A (Apache) ] --> Symbolic link --> [ (link) partition B ]

当我用现在位于“A”中的真实文件夹更新 DocumentRoot 时,问题解决了。

相关内容