【问题标题】:htaccess doesn't work on localhosthtaccess 在本地主机上不起作用
【发布时间】:2016-12-30 19:58:42
【问题描述】:

我今天刚开始玩 URL 重写,我看了/阅读了一些教程,但我仍然不明白这种重写是如何工作的。

我创建了一个.htaccess 文件并将其放在我的根目录中。 我目前正在使用 Apache 在我的本地机器上工作。

我希望http://localhost:5216/index.php 重定向到http://localhost:5216/index

在我的 .htaccess 文件中,我有以下内容:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^index?$ index.php

这不起作用。我尝试刷新页面,我检查了httpd.conf 文件是否选择了AllowOverride All。 我已经阅读了一些教程,我认为我这样做是正确的,但似乎我没有。我的文件有什么问题?

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    我想让http://localhost:5216/index.php 重定向到http://localhost:5216/index

    RewriteRule ^index?$ index.php
    

    您的RewriteRule 实际上正好相反...它从/index(或/inde,因为您已将最后一个x 设为可选)重写为index.php。请注意,这是内部重写,而不是外部重定向

    您的RewriteRule 接近您可能想要做的事情。这允许您链接到/index(在您的应用程序中)并仍然提供实际的/index.php 文件。


    更进一步...假设您在文档根目录中有一个名为“contact-the-monster.php”的contact 文档——这是文件系统上的物理文件。但是您想使用简单的 URL /contact 来访问此文档 - 这是您将在整个应用程序中使用的 URL。您不希望任何用户看到文件名“contact-the-monster.php”。然后在您的根.htaccess 文件中,您需要在内部重写所有对/contact 的请求到/contact-the-monster.php,类似于:

    RewriteRule ^contact$ contact-the-monster.php [L]
    

    包含L (LAST) 标志,因为您可能不需要执行任何其他操作。


    确保MultiViews 未启用。这可以在.htaccess 中使用Options 指令禁用:

    Options +FollowSymLinks -MultiViews
    

    MultiViews 可能与 mod_rewrite 冲突以产生意外结果。尤其是当您的 URL 映射到一个没有文件扩展名的文件时。

    【讨论】:

    • 所以它应该是这样的? RewriteRule ^index index.php
    • 没关系,尽管我会在模式中添加一个字符串锚($)的结尾。 IE。 RewriteRule ^index$ index.php。否则它将匹配/index-anything。您必须小心重写/重定向循环,尽管在这种情况下您应该没问题。我用另一个例子更新了我的答案。
    • 我已经按照你给我的方式试过了。我还检查了其他一些教程,但它仍然不起作用。我写了这个 RewriteRule ^index index.php [NC, L] RewriteRule ^profile/([0-9a-zA-Z]+) profile.php?username=$1 [NC] 这两个都不起作用。 htaccess 文件应该在根目录中(我所有的 .php 和 .html 文件都在其中),这是正确的吗?
    • “不起作用”是什么意思?有什么事吗?你有404吗?您是否确认正在处理 .htaccess 文件?如果您在第一行包含一些 垃圾,会出现错误吗?
    • 现在检查。我认为 apache 忽略了 htaccess 文件。我没有收到任何错误,页面加载没有任何问题。
    【解决方案2】:

    实际上我也遇到过同样的问题,并认为根本没有解决方案可以提供帮助,但我发现这一行代码很神奇。

    Options +FollowSymLinks -MultiViews
    

    将它添加到您的 .htaccess 文件的第一行,一切都应该像魅力一样工作。感谢分享。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我的解决方案是这样的(请注意,我将 Laragon 与 WAMP 一起使用)。 它与单个 htaccess 文件无关,因为 Apache 的 httpd.conf 中有这一部分,它们都被忽略了:

      DocumentRoot "D:/laragon/www"
      <Directory "D:/laragon/www">
          Options Indexes FollowSymLinks Includes ExecCGI
          AllowOverride None
          Require all granted
      </Directory>
      

      所以您需要找到您的 httpd.conf 并将 AllowOverride None 更改为 AllowOverride All。您的 .htaccess 文件现在应该执行了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-17
        • 2012-05-03
        • 2021-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多