我在我的 Vista 机器上安装了全新的 Apache 2.2,一切正常,除了 mod rewrite。
我已取消注释
LoadModule rewrite_module modules/mod_rewrite.s
但我的重写规则都不起作用,即使是简单的规则
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
我使用的所有规则都在我的主机上工作,所以它们应该没问题,所以我的问题是,apache 配置中是否有任何隐藏的东西可以阻止 mod 重写?
为了使用mod_rewrite,您可以在终端中键入以下命令:
mod_rewrite
sudo a2enmod rewrite
之后重启apache2
sudo /etc/init.d/apache2 restart
要么
sudo service apache2 restart
或按照新的统一系统控制方式
sudo systemctl restart apache2
然后,如果您愿意,可以使用以下.htaccess文件。
.htaccess
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
上述.htaccess文件(如果放置在您的 中DocumentRoot)会将所有流量重定向到 中的index.php文件,DocumentRoot除非该文件存在。
DocumentRoot
index.php
因此,假设您有以下目录结构,而 httpdocs 是DocumentRoot
httpdocs/ .htaccess index.php images/ hello.png js/ jquery.js css/ style.css includes/ app/ app.php
httpdocs 中存在的任何文件都将使用.htaccess上面显示的方式提供给请求者,但是,其他所有文件都将被重定向到httpdocs/index.php. 您的应用程序文件includes/app将无法访问。
httpdocs/index.php
includes/app