提问人:Jakub Arnold 提问时间:5/15/2009 更新时间:6/2/2020 访问量:1510532
如何为 Apache 2.2 启用mod_rewrite
How to enable mod_rewrite for Apache 2.2
问:
我已经在我的 Vista 机器上全新安装了 Apache 2.2,除了 mod 重写之外,一切正常。
我已经取消了评论
LoadModule rewrite_module modules/mod_rewrite.s
但是我的重写规则都不起作用,即使是像这样的简单规则
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
我使用的所有规则都在我的主机上工作,所以它们应该没问题,所以我的问题是,apache配置中是否有任何隐藏的东西,可以阻止mod重写?
答:
显然有不止一种方法可以做到这一点,但我建议使用更标准的方法:
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
此外,如果要默认启用 RewriteEngine,则可能需要添加类似
<IfModule mod_rewrite>
RewriteEngine On
</IfModule>
添加到 httpd.conf 文件的末尾。
如果没有,请确保指定
RewriteEngine On
.htaccess 文件中的某个位置。
评论
对于我的情况,我有
RewriteEngine On
在我的 中,以及正在加载的模块,它不起作用。.htaccess
我的问题的解决方案是编辑我的 vhost 条目以包括
AllowOverride all
在相关网站的部分中。<Directory>
评论
a2enmod rewrite
RewriteEngine On
.htaccess
AllowOverride all
AllowOverride all
AllowOverride
.htaccess
None
.htaccess
.htaccess
a2enmod rewrite
为了使用,您可以在终端中键入以下命令:mod_rewrite
sudo a2enmod rewrite
在以下时间后重新启动 apache2
sudo /etc/init.d/apache2 restart
或
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
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
评论
AllowOverride All
.htaccess
a2enmod rewrite
尝试设置:。AllowOverride All
第二个最常见的问题是没有启用mod rewrite:然后重新启动apache。a2enmod rewrite
评论
在 Ubuntu 中:
跑:
a2enmod rewrite
然后:
service apache2 restart
mod_rewrite
现在将启用!
如果以上方法都不起作用,请尝试编辑 /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
这对我有用
评论
/laravel/public/authors was not found on this server
/index.php was not found on this server
<Directory /var/www/html>
什么对我有用(在 ubuntu 中):
sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
此外,如前所述,请确保在AllowOverride all
/etc/apache2/sites-available/default
如果您知道问题的根源,有很多方法可以解决此问题。
问题 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
评论
AllowOverride All
AllowOveride Options
打开终端并输入,它将为您的模块启用Apache。a2enmod rewrite
mod_rewrite
然后转到并编辑默认文件。(为此,您必须对此文件和 sites-available 文件夹具有可写权限。/etc/apache2/sites-available
将下面的第 4 行替换为现有的第 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>
现在重新启动你的 apache 或/etc/init.d/apache2 restart
service apache2 restart
再次进行干净的 URL 测试,这次将通过。
我刚刚做到了这一点
sudo a2enmod rewrite
然后,您必须通过以下命令重新启动 Apache 服务
sudo service apache2 restart
当我第一次为忽略我的流量mod_rewrite规则而苦苦挣扎时,我(令人沮丧地)了解到我把它们放在了错误的位置,这意味着无论它们写得多么好,我的流量都会忽略所有这些规则。确保这种情况不会发生在您身上:<VirtualHost>
# 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
评论
新的 apache 版本在某种程度上发生了变化。如果你的apache版本是2.4,那么你必须去。将有一个名为 的文件。您必须编辑该页面(您应该具有root权限)。像这样更改目录文本/etc/apache2/
apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
现在重新启动 apache。
service apache2 reload
希望它有效。
评论
旧线程,只想把不将 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
使用以下命令
sudo a2enmod rewrite
并通过以下命令重新启动apache
sudo service apache2 restart
评论
AllowOverride FileInfo
AllowOverride All