如何激活mod_rewrite?

时间:2011-12-25 08:53:40

标签: php apache mod-rewrite

我知道已经多次询问过这个问题了。但我无法让它发挥作用。

我在我的Ubuntu服务器上安装了Apache2我还可以确认使用phpinfo();安装了mod_rewrite。我还在我的根文件夹(/var/www/.htaccess)中放了一个名为.htaccess的文件。在我的.htaccess文件中,我粘贴以下代码:

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^.*$ test.php

所以一切都被重定向到test.php

但它仍然无效。所以我检查了/ etc / apache2下的httpd.conf文件。它是完全空的,没有代码行(这对我来说有点奇怪)?!但是在检查Stackoverflow答案时,httpd.conf中至少应该包含以下代码:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Deny from all
    Satisfy all
</Directory>

所以我将该代码粘贴到httpd.conf中。并使用sudo /etc/init.d/apache restart重新启动Apache。它仍然不起作用?

我还测试过打开文件/ sites-enabled / 000-default和/ sites-available / default,其中所有虚拟主机设置位于/var/www/目录下并更改为AllowOverride All。 mod_rewrite仍然无法正常工作。谁能帮帮我吗。这个问题一直在烘烤我的坚果。

另外,我的apache2.conf文件不起作用。我试着写som废话。它仍然给我正常结果而不是http 500错误

6 个答案:

答案 0 :(得分:10)

如果您运行此命令,

sudo a2enmod rewrite

ubuntu将输出它是否已激活或已在运行。

答案 1 :(得分:7)

Niels Bom的所有建议都是最聪明的(我认为)。但我会添加这个作为第一个建议:尝试通过Ubuntu命令启动和停止apache:然后当它应该停止时,确保它已停止,即验证您的本地页面不再显示

  • 阅读文件夹/etc/apache2/中的内容。应该有apache2.conf conf.d envvars httpd.conf mods-available mods-enabled ports.conf sites-available sites-enabled
  • 然后如果一切正常,请看看mods-enabled你会发现如果启用了mod,那么你可以继续,否则看看关于启用modrewrite的其他答案
  • 看一下sites-enabled:在哪里可以找到启用了...(猜猜是什么?)的网站。应该有default网站。
  • 如果是这样,打开这个文件,并尝试将apache废话放入其中,重新启动服务器并查看它是否满意。如果它不开心那么好。如果它很高兴那么你正在处理错误的文件
  • last:尝试检查此默认vhost的 htaccess文件的授权。以下是它们的工作方式:如果Apache在vhost文件中找不到任何指令,它将应用全局配置。因此,我建议您在vhost文件中添加<virtualhost> - </virtualhost>标记之间的配置(当然)。

请告诉我发生了什么,我很乐意相应地更新我的问题。

答案 2 :(得分:5)

因为这个帖子在google上排名很高,所以这里有另一个解决方案:

导致问题的原因是什么?

这是因为apache中的标准定义只是阻止所有.htaccess的东西。 Seriouslsy。这似乎是Ubuntu 12.04 LTS的初始状态。

<强>解

在/ etc / apache2 / sites-available / default(这是一个文件,而不是文件夹)中有一个代码块,如

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride XXXXXXXXXXXXXXXXXXX
    Order allow,deny
    allow from all
</Directory>

在这里你应该改变

AllowOverride None

AllowOverride All

重要

你必须使用sudo权限进行这些更改,否则Ubuntu将不会保存文件。在RESTART之后,你的.htaccess东西应该可行。要测试.htaccess只需将一些无意义的文本放入其中并浏览localhost或127.0.0.1 - &gt;如果你看到“内部服务器错误”:瞧!删除废话,你准备好了。

答案 3 :(得分:2)

好的,让我们检查一下假设:

  1. 在你的Apache配置文件中放入废话(并重新启动Apache以使它们生效),Apache会在重启时“抱怨”吗?然后它尝试加载这些文件。试试这个可以找到的每个Apache配置文件。您现在拥有已加载的Apache配置文件的完整列表。

  2. 在你的htaccess中废话,重新加载页面,你有500错误吗?如果没有,则htaccess没有加载。

  3. 将最基本的mod_rewrite语句放在你的htaccess中:

    选项+ FollowSymLinks RewriteEngine On RewriteRule ^。* $ test.html

  4. 这应该重写每个test.html的请求。

    试试这个并告诉我们结果。

答案 4 :(得分:0)

请检查/etc/apache2/apache2.conf

答案 5 :(得分:0)

在你提出的问题中,你提到过,

  

另外,我的apache2.conf文件不起作用。我试着写som废话。它仍然给我正常结果而不是http 500错误

所以,在发布更多东西以试用.conf文件之前,

运行strace -o somefilename.txt sudo /etc/init.d/apache restart

strace - 跟踪系统调用和信号:strace(1) - Linux man page


-o somefilename.txt部分将strace的输出放入somefilename.txt。打开文本文件并搜索httpd.conf。您应该能够看到类似于以下的代码:

stat("/etc/httpd/conf/httpd.conf", {st_mode=S_IFREG|0644, st_size=35894, ...})=0
open("/etc/httpd/conf/httpd.conf", O_RDONLY|O_CLOEXEC) = 3

httpd.conf的路径将替换为默认httpd.conf

的路径

如果找到一个,请打开httpd.conf并在那里进行更改。否则,httpd.conf没有加载。

如果是以后的情况,请尝试:

sudo /etc/init.d/apache -f  /path/to/httpd.conf start

另外,检查NameVirtualHost *:80并确保没有注释。