我已经在我的Vista机器上安装了新的Apache 2.2,一切都很好,除了mod重写。
我已经激活
LoadModule rewrite_module modules/mod_rewrite.s
但我的重写规则都没用,即使是像这样简单的
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
我使用的所有规则都在我的主机上工作,所以他们应该是好的,所以我的问题是,在apache配置中有任何隐藏的东西,可以阻止mod重写?
为了使用mod_rewrite,你可以在终端输入以下命令:
sudo a2enmod rewrite
之后重新启动apache2
sudo /etc/init.d/apache2 restart
or
sudo service apache2 restart
或按新的统一系统控制方式
sudo systemctl restart apache2
然后,如果您愿意,您可以使用下面的.htaccess文件。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
上面的.htaccess文件(如果放在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。include /app中的应用程序文件将无法访问。
旧线程中,不要设置AllowOverride为all而是使用你想使用的特定mod,
AllowOverride mod_rewrite mod_mime
这一行应该取消注释
LoadModule rewrite_module modules/mod_rewrite.so
参考资料
http://www.eschrade.com/page/why-you-should-not-use-htaccess-allowoverride-all-in-production/
https://httpd.apache.org/docs/2.4/misc/security_tips.html
https://httpd.apache.org/docs/2.4/rewrite/avoid.html
如果你知道问题的根源,有很多方法可以解决这个问题。
问题1
首先,这可能是apache没有安装或启用mod_rewrite.c模块的问题。
因此,您必须按如下方式启用它
打开控制台,输入以下内容:
Sudo a2enmod重写
重新启动apache服务器。
Service apache2 restart
问题2
除此之外,如果它不起作用,您还可以更改apache conf文件(apache2.conf, http.conf或000-default文件)的覆盖规则。
查找目录/var/www/
将“Override None”更改为“Override All”
问题3
如果你得到一个错误说重写模块没有找到,那么可能是你的userdir模块
未启用。因此,您需要启用它。
在控制台中输入以下内容:
Sudo a2enmod userdir
然后尝试启用重写模块,如果仍然未启用(如上所述)。
欲了解更多信息,请访问该网站:http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html