我已经在我的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
要么
sudo service apache2 restart
或者按照新的统一系统控制方式
sudo systemctl restart apache2
然后,如果您愿意,可以使用以下.htaccess
文件.
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
上述.htaccess
文件(如果放在您DocumentRoot
的index.php
文件中)将所有流量重定向到文件,DocumentRoot
除非该文件存在.
所以,假设您有以下目录结构,而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
将无法访问.
对于我的情况,我有
RewriteEngine On
在我的.htaccess
,以及正在加载的模块,它无法正常工作.
我的问题的解决方案是将我的vhost条目编辑为inlcude
AllowOverride all
在该
网站的部分中.
我在一篇文章中写过这篇文章:http: //www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu
尝试设置:AllowOverride All
.
第二个最常见的问题是没有启用mod重写:a2enmod rewrite
然后重启apache.
如果不是上述工作尝试编辑/ etc/apache2/sites-enabled/000-default
几乎在顶部你会发现
Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all
更改AllowOverride None
到AllowOverride All
这对我有用
在Ubuntu中:
跑:
a2enmod rewrite
然后:
service apache2 restart
mod_rewrite
现在将启用!
如果您知道问题的根源,有多种方法可以解决此问题.
问题1
首先,您的apache没有安装或启用mod_rewrite.c模块可能会出现问题.
因此,您必须按如下方式启用它
打开你的控制台并输入它,这个:
sudo a2enmod rewrite
重启你的apache服务器.
service apache2 restart
问题2
除了上述内容之外,如果它不起作用,您还可以从apache conf文件(apache2.conf,http.conf或000-default文件)更改覆盖规则.
找到"目录/ var/www /"
将"覆盖无"更改为"覆盖所有"
问题3
如果您收到错误,指出未找到重写模块,那么可能您的userdir模块未启用.因此,您需要启用它.
在控制台中输入以下内容:
sudo a2enmod userdir
然后尝试启用重写模块,如果仍未启用(如上所述).
要进一步阅读此内容,您可以访问以下网站:http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
打开终端和打印a2enmod rewrite
,它将mod_rewrite
为您的模块启用Apache.
然后转到/etc/apache2/sites-available
并编辑默认文件.(为此,您必须具有此文件和站点可用文件夹的可写权限.)
在下面用现有的第4到14行替换
DocumentRoot /var/wwwOptions FollowSymLinks AllowOverride All Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all
现在用/etc/init.d/apache2 restart
或重启你的apacheservice apache2 restart
再次进行干净的URL测试,这次它将被传递.
新的apache版本在某种程度上有所改变.如果你的apache版本是2.4那么你必须去/etc/apache2/
.将有一个名为的文件apache2.conf
.你必须编辑那个(你应该有root权限).像这样更改目录文本
Options Indexes FollowSymLinks AllowOverride All Require all granted
现在重启apache.
service apache2 reload
希望它有效.
<编辑>
刚刚注意到你说mod_rewrite.s而不是mod_rewrite.so - 希望你的问题是一个拼写错误,而不是在httpd.conf文件中!:)
编辑>
我更习惯在Linux上使用Apache,但是前几天我不得不这样做.
首先,看看你的Apache安装目录.(我假设你把它安装到"C:\ Program Files"这里)
看一下文件夹:"C:\ Program Files\Apache Software Foundation\Apache2.2\modules",并确保那里有一个名为mod_rewrite.so的文件.(应该是,它是作为默认安装的一部分提供的.
接下来,打开"C:\ Program Files\Apache Software Foundation\Apache2.2\conf"并打开httpd.conf.确保该行:
#LoadModule rewrite_module modules/mod_rewrite.so
没有注释:
LoadModule rewrite_module modules/mod_rewrite.so
此外,如果要在默认情况下启用RewriteEngine,您可能希望添加类似的内容
RewriteEngine On
到httpd.conf文件的末尾.
如果没有,请确保指定
RewriteEngine On
你的.htaccess文件中的某个地方.
我只是这样做
sudo a2enmod rewrite
那么您必须通过以下命令重新启动apache服务
sudo service apache2 restart