如何在Apache 2.4上启用mod_rewrite?

18

我正在使用WordPress,并希望启用美化URL功能,但它们不起作用,我认为这可能是由于mod_rewrite引起的,但我不知道如何在CentOS 7下的Apache 2.4上启用它...

我已经尝试了这个方法:

grep -i LoadModule /etc/httpd/conf/httpd.conf | grep rewrite

但是没有任何反应。另外想知道加载所有Apache模块是否会有任何不良后果或者是不好的实践?


现在通常不只有一个单一的.conf文件了。例如,许多发行版会将模块配置/启用放入每个模块文件中。 - Marc B
嗯,你知道CentOS 7现在是如何工作的吗? - Jonathan Solorzano
7个回答

27

我找到了一种方法来知道一个模块是否已加载,以下是列出启用的模块的命令:

apachectl -M | sort

它将按字母顺序列出所有已启用的模块。

WordPress具有默认的.htaccess,其中启用了rewrite_module以供其使用:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

我需要做的唯一一件事就是将以下内容添加到/etc/httpd/conf.d/vhosts.conf文件中。

<Directory /var/www/mysite>
    Options Indexes FollowSymLinks
    Require all granted
    AllowOverride All
</Directory>

那是因为我在那个文件中处理我的主机。但它可以在httpd.conf或任何其他被包含到httpd.conf.conf文件中完成。

谢谢...


1
“AllowOverride All”是重要的部分;它** 必须 **位于“<Directory>”块内(我曾将其放在“<Location>”块中,没有报错,但也没有起作用)。 - Matija Nalis
1
但是在Apache 2.4上,/etc/httpd目录不存在!(Ubuntu 16.04) - Louis
1
AllowOverride All存在安全风险问题(以及性能问题)。请查看https://httpd.apache.org/docs/current/howto/htaccess.html。 - Arthur Ronconi
我之前漏掉了这个,所以mod_rewrite对我来说没有起作用。将AllowOverride设置为All,问题解决了! - Anos K. Mhazo

14

Apache2带有可执行文件a2enmoda2dismod,它们将完成符号链接设置配置文件的所有“脏活儿”。

在基于Debian的发行版中,通常位置是/etc/apache/mods-available/。这里包含了.conf配置文件(适用时)和每个模块的.load文件,其中包含LoadModule Apache2指令。如果在/etc/apache2/mods-enabled/中存在指向其.load文件的符号链接,则启用该模块。

例如,要启用Rewrite模块,请使用以下命令:

$ a2enmod rewrite

哦,但是语法是什么?a2enmod mod_rewrite? - Jonathan Solorzano
那么你没有运行官方发行版本仓库中的Apache2.4,即从其他来源安装或手动编译。 - marekful
没用...那对我没起作用..., 它仍然显示命令未找到。在CentOS 7中,位置为_/etc/httpd/modules/_。 - Jonathan Solorzano
嗯,我该如何检查是否已从官方仓库安装?我该如何从官方仓库重新安装它? - Jonathan Solorzano
1
那么这个答案是无效的...我指定了CentOS,而那个答案说a2enmod a2dismod在CentOS上不起作用。 - Jonathan Solorzano
显示剩余4条评论

10
# nano /etc/httpd/conf/httpd.conf

查找

follow (AllowOverride none) 

并将其更改

(AllowOverride All) 

AllowOverride All存在安全风险问题(以及性能问题)。请查看https://httpd.apache.org/docs/current/howto/htaccess.html。 - Arthur Ronconi

4
httpd.conf 文件中,搜索 AllowOverride None 并将其更改为 AllowOverride All,然后重新启动 Apache。

0

仅适用于CentOS 7: a2enmod是一个Debian/Ubuntu命令。您需要编辑CentOS服务器的Apache配置文件。

您需要编辑/etc/httpd/conf/httpd.conf文件,并确保更改AllowOverride标志为所有

基本上应该像这样: (注意:默认的httpd.conf文件中有许多注释行)

<Directory "/var/www/html"> AllowOverride All </Directory>


0

是的,从“覆盖无”更改为“覆盖所有”使其工作:

在Debian 10上,配置文件在这里:

/etc/apache2/apache2.conf

我不知道安全风险,但它能够工作!


-2

如果您想使用重写模块,请查看此YouTube逐步教程,了解如何在Wamp Apache中启用重写模块https://youtu.be/xIspOX9FuVU?t=1m43s
Wamp服务器图标 -> Apache -> Apache模块,并选中重写模块选项。
之后,您就可以使用URL重写了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接