【问题标题】:RewriteRule in .htaccess not working.htaccess 中的 RewriteRule 不起作用
【发布时间】:2010-02-03 17:55:10
【问题描述】:

我目前在本地机器上运行 Apache2,安装了最新版本的 Ubuntu。

我正在尝试使用 .htaccess 文件进行基本的 URL 重写。

文件“http://localhost/page.php?=home”确实存在,而位置“/doesnotexist/home”不存在。

我希望在请求第二个页面时加载第一个页面。

我的 .htaccess 文件如下所示:

RewriteEngine On
RewriteRule ^/doesnotexist/(.*)$ /page.php?p=$1 

我的 httpd.conf 文件如下所示:

LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

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

请注意,我的 httpd.conf 文件看起来一模一样,因为在我编辑它之前它是空的。

我得到的结果是这样的:

Not Found

The requested URL /doesnotexist/home was not found on this server.

我已经用谷歌搜索了这个问题,除了上面的错误,我从来没有得到任何东西。

如果有人有任何想法,我将非常感激。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    为了他人的利益,我想出了答案:

    在文件“/etc/apache2/sites-enabled/000-default”中有一行:

    AllowOverride None
    

    将其更改为:

    AllowOverride All
    

    【讨论】:

    • 注意:该配置选项已移至 /etc/apache2/apache2.conf
    • 我在 下更改了这个,现在是 500 Internal server error...
    • 为我工作。在 Mac OS X (2021) 上,您可以在 httpd.conf 中的 &lt;Directory "/Library/WebServer/Documents"&gt; 下找到该选项(当 Mac OS X 的 Apache 的布局与 Linux 略有不同时(没有 sites-enabled 目录),这在某种程度上令人生畏)
    【解决方案2】:

    在 .htaccess 文件中使用 mod_rewrite 时,您需要从模式中删除上下文路径前缀。在根目录的情况下,路径前缀只是/。所以试试这个:

    RewriteRule ^doesnotexist/(.*)$ /page.php?p=$1
    

    【讨论】:

    • 感谢您的快速回答,但抱歉,行为没有改变。
    【解决方案3】:

    如果我将 .htaccess 放入 /Library/WebServer/Documents 并打开“localhost/”;对其进行测试,这可以按预期工作。它只是在“~/Sites”中不起作用。我在 Mac OS X Mavericks 上试过这个。

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多