【问题标题】:How to activate mod_rewrite?如何激活 mod_rewrite?
【发布时间】:2012-01-27 13:43:54
【问题描述】:

我知道这个问题已经被问过好几次了。但我无法让它工作。

我在我的 Ubuntu 服务器中安装了 Apache2 我还可以确认 mod_rewrite 是使用 phpinfo(); 安装的。我还在我的根文件夹 (/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 文件也不起作用。我试着写一些废话。它仍然给我正常的结果,而不是 http 500 错误

【问题讨论】:

  • 如果您使用的是标准配置,那么您的基本文档根设置将位于 /etc/apache2/sites-available/default 中(如果您正在寻找)。在那里你可以插入 AllowOverride All 这将允许通过 .htaccess 文件进行重写。

标签: php apache mod-rewrite


【解决方案1】:

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

是什么导致了问题?

这是因为 apache 中的标准定义简单地阻止了所有 .htaccess 内容。认真的。这似乎是 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 将不会保存文件。重新启动后,您的 .htaccess 东西应该可以工作。要测试 .htaccess,只需将一些无意义的文本放入其中并浏览到 localhost 或 127.0.0.1 -> 如果您看到“内部服务器错误”:瞧!去掉废话,你就可以开始了。

【讨论】:

    【解决方案2】:

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

    另外,我的 apache2.conf 文件也不起作用。我试着写一些废话。它仍然给我正常的结果,而不是 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 并确保它没有被评论。

    【讨论】:

      【解决方案3】:

      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,如果启用了模组,您将在其中找到,如果启用,则可以继续,否则请查看有关启用 modrewrite 的其他答案
      • 看看sites-enabled:在这里您可以找到启用了...(猜猜是什么?)的网站。应该有default 网站。
      • 如果是的话,打开这个文件,试着把apache废话放进去,重启服务器,看看它是否满意。如果不开心就好了。如果它很高兴,那么您正在处理错误的文件
      • 最后:尝试检查此默认虚拟主机的 htaccess 文件的授权是什么。它们的工作方式如下:如果 Apache 在 vhost 文件中没有找到任何指令,它将应用全局配置。所以我建议在你的 vhost 文件中添加配置,在 &lt;virtualhost&gt; - &lt;/virtualhost&gt; 标签之间(当然)。

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

      【讨论】:

        【解决方案4】:

        请查看/etc/apache2/apache2.conf

        【讨论】:

        • 我再次检查,在我的安装中,目录指令位于:/etc/apache2/mods-available/alias.conf。确保别名模块已启用
        • 我有那个文件吗?我该怎么处理它?
        【解决方案5】:

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

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

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

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

          选项 +FollowSymLinks 重写引擎开启 重写规则 ^.*$ test.html

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

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

        【讨论】:

        • 抱歉回复晚了。我以为我的 htaccess 工作,但它没有。我测试了您的三个步骤,但没有一个按预期工作。你知道该怎么做吗?第 1 步和第 2 步没有给我一个 http 500 错误,并且服务器绕过了第 3 步
        • 如果您在 Apache 配置文件中添加了无意义的内容,而 Apache 在重新启动时没有抱怨,则 Apache 没有读取该配置文件。你能给我们一个完整的列表,列出 /etc/apache2/ 中的每个文件及其内容吗?
        • 明确一点:“Apache 配置文件”是指 /etc/apache2/ 中的任何文件,不是您的 .htaccess。
        【解决方案6】:

        如果你运行这个命令,

        sudo a2enmod rewrite
        

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

        【讨论】:

        • 这行不通。配置需要手动重写。
        猜你喜欢
        • 2016-07-16
        • 2011-01-13
        • 2019-07-13
        • 1970-01-01
        • 2019-11-02
        • 2023-03-08
        • 2019-07-05
        • 2021-07-18
        • 1970-01-01
        相关资源
        最近更新 更多