我正在尝试设置一个 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 时,问题解决了。