【问题标题】:How do you redirect a friendly url to a dynamic url?如何将友好的 url 重定向到动态 url?
【发布时间】:2010-12-04 01:11:42
【问题描述】:

将 Linux 上看起来友好的 url 动态重定向到 Windows 上的动态 URL 的最佳方法是什么?

例如
domainone.com/dir/一/二 重定向到 domaintwo.com/index.aspx?a=one&b=two

domainone.com/dir/三/四 重定向到 domaintwo.com/index.aspx?a=three&b=four

【问题讨论】:

  • 为什么 Windows 和 Linux 都参与其中 - 是否有 Linux 机器充当 Windows 机器的代理?
  • 你想要一个正确的重定向,即。浏览器 URL 发生变化,还是您希望它是透明的?
  • @Ben Linux 主机是我的,Windows 是合作伙伴的站点。
  • @Orbling 是的,正确的重定向。
  • 重定向需要在 Linux 端。

标签: php redirect query-string


【解决方案1】:

名为 Location 的 HTTP 标头是您跨主机/域重定向用户的方式。

根据您的服务器配置和用于生成 HTTP 标头的机制,具体实现会有所不同。 PHP 中的一个示例(您的问题似乎已被标记)是包含以下代码:

header('Location: http://domaintwo.com/index.aspx?a=one&b=two');

上面的字符串与任何其他字符串一样,因此应用适当的逻辑来提供所需的重定向 URL。

在域配置文件(精确路径因服务器软件和操作系统而异)或更传统的.htaccess 文件中也可能出现相同的效果。如果您提供有关您的托管环境的更多信息,有人将能够帮助您设计所需的重写规则。我更喜欢将这种级别的智能重写放在 PHP 脚本中,因为我认为 .htaccess 文件往往更难管理和“阅读”。

【讨论】:

  • 如何让它从 .com/one/two 中拉出 ?a=one&b=two?
  • PHP 有你常用的字符串操作库,你可以使用$_SERVER['REQUEST_URI'] 来获取请求的路径。如何执行基本的字符串操作超出了这个问题的范围;此外,大量的websites 可以比我向您介绍如何从 PHP 中的字符串中获取信息做得更好。
  • 对不起,问题是这样的,我应该如何改写?
  • @Nate,如果你想走这条路,你可以使用与 PHP 中的 Apache 类似的正则表达式。 $redirectURI = 'http://domaintwo.com/index.aspx?' . preg_replace("#^/a/([^/]+)/([^/]+)$#", $_SERVER['REQUEST_URI'], "a=$1&b=$2"); header('Location: ' . $redirectURI); exit();
  • @Orbling:虽然正则表达式解决方案有效,并且可能是最快的方法(我可能会这样做),但如果 Nate 刚刚开始编码,从基本的字符串操作开始可能比正则表达式更好。另外,我 90% 确定您需要转义正斜杠,用正斜杠分隔正则表达式,并切换第二个和第三个参数。
【解决方案2】:

从 Apache 内部:

在服务器配置文件中,或者更有可能在 .htaccess 文件中。

您可以使用mod_rewrite 来执行此操作,但如果您想要重定向,使用mod_alias 和RedirectMatch 语句会更合适。

RedirectMatch 301 ^/a/([^/]+)/([^/]+)$ http://domaintwo.com/index.aspx?a=$1&b=$2

重写变体:

RewriteEngine On
RewriteBase /
RewriteRule ^/a/([^/]+)/([^/]+)$ http://domaintwo.com/index.aspx?a=$1&b=$2 [R=301,L]

注意 301 的使用,即永久重定向,302 用于临时重定向,或者当您总是希望人们重定向而不是直接进行未来访问时。

【讨论】:

    【解决方案3】:

    在 Linux 上解决此问题的一种非常标准的方法是将 Apache 与 mod_rewrite 一起使用(如何安装和配置 Apache 和 mod_rewrite,如果尚未设置,将取决于您的 Linux 发行版)

    然后,在您的 Apache 配置中,您可以添加如下行:

    RewriteEngine On
    RewriteRule ^/a/([^/]+)/([^/]+) http://www.domaintwo.com/index.aspx?a=$1&b=$2
    

    【讨论】:

      猜你喜欢
      • 2014-02-24
      • 2014-01-30
      • 2014-11-13
      • 2015-05-29
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      相关资源
      最近更新 更多