【问题标题】:URL rewriting that visibly rewrites (changes the URL in the address bar)明显重写的 URL 重写(更改地址栏中的 URL)
【发布时间】:2011-01-06 12:01:44
【问题描述】:

我之前问过这个问题的补充:

Mod_rewrite invisibly: works when target is a file, not when it's a directory

现在我实际上希望进行明显的重写,因为我已经切换了 URL 方案,虽然我希望旧链接能够正常工作,但我希望用户看到新的 URL 方案。

所以这行得通

RewriteRule ^oldscheme/(.*)/?$  newscheme/$1

但地址栏中的 URL 仍为http://example.com/oldscheme/foo

进行可见重写的正确方法是什么,最好只使用 mod_rewrite,而不是使用位置重定向或类似的东西?

【问题讨论】:

    标签: apache url mod-rewrite url-rewriting friendly-url


    【解决方案1】:

    事实证明,添加“重定向”代码可以解决问题:

    RewriteRule ^oldscheme/(.*)/?$  newscheme/$1  [R]
    

    回想起来很明显,但希望这会使答案更易于搜索。 我在这张出色的“备忘单”上找到了它:

    http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet/

    【讨论】:

    • 如果我是正确的,[R] 参数“强制”重写 URL。
    • 它会导致响应代码为 302 以及 Location 标头被发送到浏览器。没有它,如果可能,只会修改内部 httpd 结构。
    【解决方案2】:

    由于我现在不能离开 cmets,因此我将在此处发布对 Ignacio 评论的补充。

    您实际上应该发布一个 301(永久移动)重定向,因为您正在描述有一个新的站点目录结构。所以你的 RewriteRule 应该是

    RewriteRule ^oldscheme/(.*)/?$  newscheme/$1  [R=301]
    

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      相关资源
      最近更新 更多