【问题标题】:ReWriteRule Apache, php重写规则 Apache, php
【发布时间】:2009-04-09 18:04:12
【问题描述】:

我希望能够在用户输入 http://example.com/user/user-name 时将用户重定向到 http://example.com/user/user-name,这会显示用户详细信息

这是我正在使用的,但它给了我错误

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^.*$ /user/ [R]

firefox给出的错误是

重定向循环

Firefox 检测到服务器正在以永远不会完成的方式重定向对该地址的请求。 浏览器已停止尝试检索请求的项目。该站点正在以永远不会完成的方式重定向请求。

  • 您是否禁用或阻止了本网站要求的 cookie?
  • 注意:如果接受网站的 cookie 不能解决问题,则可能是服务器配置问题,而不是您的计算机。

谢谢

【问题讨论】:

  • 这两个网址是相同的,所以你不需要重定向;P
  • 伙计们,我可以有一个解决方案,而不是告诉我我错了:D
  • 我在回答的最后提供了一种解决方案。您想要的操作到底是什么?现在你正试图将用户从一个 URL 重定向到完全相同的位置,这不会完成任何事情。
  • 如果任何用户想要查看其他用户数据,他们只需输入 domain.com/user/user-name/ 其余脚本应该执行的操作
  • 现在你到底想知道什么?

标签: php apache rewrite


【解决方案1】:

您确实有一个重定向循环。您正在尝试从 domain.com/user/user-name 转到 domain.com/user/user-name(相同的 URL)。会发生什么:

  1. 用户访问domain.com/user/user-name
  2. 用户被重定向到domain.com/user/user-name(同一位置)。
  3. 用户再次被重定向到domain.com/user/user-name(同一位置)。
  4. 用户再次被重定向到domain.com/user/user-name(同一位置)。
  5. 重复令人作呕...

也许您打算将domain.com/user/user-name 重定向到domain.com/users.php?u=user 或其他什么?

【讨论】:

    【解决方案2】:

    您正在将一切重定向到 /user/,包括它自己。

    编辑: 每个请求都经过相同的重写集,并且由于您的 ^.*$ 正则表达式匹配,您将 /user/ 再次重定向到 /user/ 。浏览器只是通过在同一 URL 上尝试几次后停止循环来帮助您。

    如果您希望将 /a/foo 重定向到 /b/foo,则需要以下内容:

    重写规则 ^/a/(.*)$ /b/$1 [R]

    ..但你需要让源和目标不重叠,如你最初的例子,否则你会得到一个无限的重定向循环。

    【讨论】:

    • 是的,在根目录中有一个 index.php 文件,它将显示所需的内容
    【解决方案3】:

    这两个网址不一样吗?

    编辑:当我回答时,问题只说明了需要,而不是错误

    【讨论】:

      【解决方案4】:

      正如其他人已经说过的,RewriteRule 匹配任何 URI 路径(包括/user/),从而导致无限循环。

      为避免这种情况,您必须排除此 URI 路径:

      # either
      RewriteRule !^/user/$ /user/ [R]
      # or
      RewriteCond %{REQUEST_URI} !^/user/$
      RewriteRule ^ /user/ [R]
      

      这些规则将每个不被^/user/$ 匹配的URI 路径重定向到/user/。如果要在 .htaccess 文件中使用此规则,则必须删除 RewriteRule 指令模式中的前导斜杠(因此只需 ^user/$)。

      【讨论】:

        猜你喜欢
        • 2011-10-22
        • 1970-01-01
        • 2011-09-02
        • 2011-10-26
        • 1970-01-01
        相关资源
        最近更新 更多