如何为Apache2.2启用mod_重写
我在我的Vista机器上安装了新的Apache2.2,除了mod rewrite外,一切正常 我没有注释如何为Apache2.2启用mod_重写,apache,mod-rewrite,Apache,Mod Rewrite,我在我的Vista机器上安装了新的Apache2.2,除了mod rewrite外,一切正常 我没有注释 LoadModule rewrite_module modules/mod_rewrite.s 但是我的重写规则都不起作用,即使是像这样简单的规则 RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404 我使用的所有规则都适用于我的主机,所以它们应该没问题,所以我的问题是,apache配置中是否有任何隐藏的东西,可能会阻止mod
LoadModule rewrite_module modules/mod_rewrite.s
但是我的重写规则都不起作用,即使是像这样简单的规则
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
我使用的所有规则都适用于我的主机,所以它们应该没问题,所以我的问题是,apache配置中是否有任何隐藏的东西,可能会阻止mod rewrite?显然有多种方法可以做到这一点,但我建议使用更标准的方法:
ErrorDocument 404 /index.php?page=404
刚刚注意到你说的是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
此外,如果您希望在默认情况下启用重写引擎,您可能需要添加以下内容
<IfModule mod_rewrite>
RewriteEngine On
</IfModule>
在你的.htaccess文件中的某个地方。对于我的情况,我
RewriteEngine On
在my.htaccess
中,随着模块被加载,它无法工作
我的问题的解决方案是将我的vhost条目编辑到inlcude
AllowOverride all
在有关站点的
部分中。要使用mod_rewrite
,您可以在终端中键入以下命令:
sudo a2enmod rewrite
之后重新启动apache2
sudo /etc/init.d/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>
httpdocs中存在的任何文件都将使用上面显示的
.htaccess
提供给请求者,但是,其他所有文件都将重定向到httpdocs/index.php
。您在includes/app
中的应用程序文件将无法访问。尝试设置:AllowOverride All
第二个最常见的问题是没有启用mod rewrite:
a2enmod rewrite
,然后重新启动apache。在Ubuntu中:
service apache2 reload
运行:
然后:
service apache2 restart
mod_rewrite
现在将启用!如果没有上述工作,请尝试编辑/etc/apache2/sites enabled/000默认值
几乎在顶端你会发现
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
选项索引跟随符号链接多视图
不允许超限
命令允许,拒绝
通融
将AllowOverride None
更改为AllowOverride All
这对我有用(在ubuntu中):
此外,如前所述,确保在
/etc/apache2/sites available/default
的相关部分中设置了AllowOverride all
,如果您知道问题的根源,可以通过多种方法解决此问题
问题1
首先,apache没有安装或启用mod_rewrite.c模块可能有问题
因此,您必须按如下方式启用它
sudo a2enmod重写
服务apache2重启
sudo a2enmod userdir
要进一步了解这一点,您可以访问以下站点:打开终端并键入
a2enmod rewrite
,它将为Apache启用mod_rewrite
模块
然后转到/etc/apache2/sites available
并编辑默认文件。(为此,您必须对此文件和sites available文件夹具有可写权限。)
用现有线路4至14替换下面的线路
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>
DocumentRoot/var/www
选项如下符号链接
允许超越所有
选项索引跟随符号链接多视图
允许超越所有
命令允许,拒绝
通融
现在通过/etc/init.d/apache2重新启动
或服务apache2重新启动
再次进行干净的URL测试,这次它将通过。我刚刚做了这个
sudo a2enmod rewrite
然后,您必须通过以下命令重新启动apache服务
sudo service apache2 restart
当我第一次在mod_rewrite rules(忽略我的流量)中挣扎时,我(令人沮丧地)了解到我将它们放在了错误的
,这意味着我的流量将忽略所有这些规则,无论它们写得多么好。请确保这不会发生在你身上:
#更改日志位置以适合您的系统。
重写日志/var/log/apache-rw.log
重写日志级别2
如果您顺利重新启动Apache,这些参数将被激活,因此您可以将它们回收并密切监视mod_重写行为。问题解决后,请将RewriteLogLevel调低并庆祝
根据我100%的经验,我发现“重写日志”帮助我发现了重写规则的问题。我对此的建议还不够。祝你在故障排除中好运
此外,此书签是您最好的朋友:
<
sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
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>
sudo a2enmod rewrite
sudo service apache2 restart
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
service apache2 reload
AllowOverride mod_rewrite mod_mime
LoadModule rewrite_module modules/mod_rewrite.so
sudo a2enmod rewrite
sudo service apache2 restart