如何启用Apache 2.2的mod_rewrite
我已经安装了新的Apache 2.2在我的Vista机器上,一切正常,除了mod重写。
我没有注释
LoadModule rewrite_module modules/mod_rewrite.s
但是我的重写规则都不起作用,即使是简单的规则也是如此
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
我正在使用的所有规则正在处理我的托pipe,所以他们应该没问题,所以我的问题是,有没有在Apacheconfiguration隐藏的东西,可以阻止国防部重写?
为了使用mod_rewrite
你可以在terminal里input以下命令:
a2enmod rewrite
之后重新启动apache2
/etc/init.d/apache2 restart
要么
service apache2 restart
或按照新的统一的系统控制方式
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
)将会把所有的stream量redirect到DocumentRoot
的index.php
文件,除非文件存在。
所以,假设您有以下目录结构,并且httpdocs是DocumentRoot
httpdocs/ .htaccess index.php images/ hello.png js/ jquery.js css/ style.css includes/ app/ app.php
存在于httpdocs中的任何文件都将使用上面显示的.htaccess
提供给请求者,但是其他所有文件都将被redirect到httpdocs/index.php
。 includes/app
程序中的应用程序文件将无法访问。
对于我的情况,我有
RewriteEngine On
在我的.htaccess中,随着模块被加载,它不工作。
我的问题的解决scheme是编辑我的虚拟主机条目进入
AllowOverride全部
在相关网站的<Directory>部分。
我在一篇文章中写到: http : //www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu
尝试设置: AllowOverride All
。
第二个最常见的问题是没有启用mod重写: a2enmod rewrite
然后重新启动apache。
如果以上的工作不行,请尝试编辑/ etc / apache2 / sites-enabled / 000-default
几乎在顶部,你会发现
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory>
将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 file)中更改覆盖规则。
-
find“Directory / var / www /”
-
将“覆盖无”更改为“覆盖全部”
问题3
如果你得到一个错误,说明重写模块没有find,那么可能你的userdir模块没有启用。 出于这个原因,你需要启用它。
-
input到控制台中:
sudo a2enmod userdir
-
然后尝试启用重写模块,如果仍然没有启用(如上所述)。
要进一步阅读这个,你可以访问这个网站: http : //seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
打开terminal和typ2的a2enmod rewrite
,它会启用你的mod_rewrite
模块的Apache。
然后转到/etc/apache2/sites-available
并编辑默认文件。 (为此,您必须具有对此文件和站点可用文件夹的可写入权限。)
下面用现有的4到14行replace
DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
现在通过/etc/init.d/apache2 restart
或者service apache2 restart
启动你的apache
再次进行干净的URLtesting,这次它会通过。
<编辑>
只是注意到你说的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,你可能需要添加类似的东西
<IfModule mod_rewrite> RewriteEngine On </IfModule>
到你的httpd.conf文件的末尾。
如果不是,请确保您指定
RewriteEngine On
在你的.htaccess文件的某处。
新的Apache版本在某种程度上有所改变。 如果你的apache版本是2.4,那么你必须去/etc/apache2/
。 将会有一个名为apache2.conf
的文件。 你必须编辑那个(你应该有root权限)。 像这样改变目录文本
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
现在重新启动Apache。
service apache2 reload
希望它的作品。
我只是做了这个
sudo a2enmod rewrite
那么你必须通过以下命令重新启动apache服务
sudo service apache2 restart
显然有不止一种方法可以做,但我会build议使用更多的标准:
ErrorDocument 404 /index.php?page=404
我第一次用mod_rewrite规则来处理,忽略了我的stream量,我(很沮丧地)知道我把它们放在了错误的<VirtualHost>
,这就意味着我的stream量无论写得多好都会忽略掉所有的stream量。 确保这不会发生在你身上:
# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2
如果执行Apache的正常重启,这些参数将会激活,因此您可以重新使用它们并密切监视mod_rewrite的行为。 一旦你的问题得到解决,把RewriteLogLevel放下来庆祝。
在100%的经验中,我发现RewriteLog帮助我发现了我的重写规则的问题。 我不能推荐这个足够的。 祝您在排除故障!
此外,这个书签是你最好的朋友: http : //httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
什么对我有用(在Ubuntu中):
sudo su cd /etc/apache2/mods-enabled ln ../mods-available/rewrite.load rewrite.load
另外,如前所述,确保AllowOverride all
设置在/etc/apache2/sites-available/default
的相关部分
我强烈build议每个人都想在.htacces文件中启用mod_rewrite指令来使用AllowOverride FileInfo
而不是允许所有的东西,因为这个页面上的所有答案都是build议的。 很遗憾,看到所有这些答案都采取了“长期工作 – 好的方法”,而不是试图理解所提出的“解决scheme”的后果。 尝试了解您在服务器上所做的工作,以及如何限制AllowOverride All
提供的权限。 RTFM! 在这个问题上是非常清楚的。 来吧,这不是火箭科学,它只是一个networking服务器!
老线程,只是想把不要设置AllowOverride而是使用你想使用的特定的MOD,
AllowOverride mod_rewrite mod_mime
这条线应该是un-comment
LoadModule rewrite_module modules/mod_rewrite.so
Refrences