【问题标题】:mod_rewrite - redirect from one domain to another and preserve trailing values in urlmod_rewrite - 从一个域重定向到另一个域并在 url 中保留尾随值
【发布时间】:2010-11-20 04:59:39
【问题描述】:

我认为这是 mod_rewrite 中一个非常直接的问题:

我有一个域,需要重定向到另一个域,但保留第一个 URL 中最后一个斜杠 (/) 之后的任何值,一直到第二个。

domain.com/4433 应该转移到 domain.com/folder/?p=4333

为清楚起见列出:

来自:domain.com/4433

收件人:domain.com/folder/?p=4333

有什么想法吗?

编辑: 做了一些测试,我们找到了以下解决方案:

RewriteCond %{HTTP_HOST} ^domain.com$

重写规则 ^([0-9a-z]*)$ /folder/?p=$1 [NC]

真诚地, - 巴克伦

【问题讨论】:

  • 你想要一个 HTTP 重定向还是让服务器在后台执行此操作而不引起用户注意?
  • 应该在没有用户注意的情况下完成。但是我们找到了解决方案,它是: RewriteCond %{HTTP_HOST} ^domain.com$ RewriteRule ^([0-9a-z]*)$ /folder/?p=$1 [NC]

标签: mod-rewrite


【解决方案1】:

如果你不是真的想重定向但想要有漂亮的 URL,你可以使用

RewriteEngine On
RewriteRule ^/(.+)$ /folder?p=$1 [L]

这会将第一个斜线之后的所有内容都插入到 $1 处 - 但前提是斜线后面有东西。它不会发出重定向,因此用户不会注意到。

【讨论】:

    【解决方案2】:

    没有更多信息,试试这个:

    RewriteEngine on
    RewriteRule ^/([^/]+)$ /folder/?p=$1
    

    如果您想在 .htaccess 文件中使用该规则,请删除前导斜杠。

    【讨论】:

      【解决方案3】:
      RewriteEngine On
      RewriteCond %{QUERY_STRING} ^$
      RewriteRule ^(.*)$ domain.com/folder?p=$1 [R=301,L]
      

      【讨论】:

      • 如果两个域使用相同的虚拟主机运行,那么这将导致无限的重定向循环。
      • @Residuum:不只是在那种情况下。 Substitution 只是一个相对路径。所以/4433会被重定向到/domain.com/folder?p=4433/domain.com/domain.com/folder?p=domain.com/folder会被重定向到/domain.com/domain.com/domain.com/folder?p=domain.com/domain.com/folder等等。
      • 感谢大家对我粗心的回答发表评论。我试图进行(也许是另一个粗心的)修复。我想真正的解决方案将取决于完整的有效网址集如何查找域。
      【解决方案4】:

      以防万一:domain.com = domain1.com 和 domain2.com? domain1.com 应该重定向到 domain2.com 吗?两者都在同一台服务器上运行(可选)?

      [编辑:]

      如果您真的只想按照评论中所述进行操作,请执行以下操作:

      RewriteEngine On
      
      RewriteCond %{HTTP_HOST} ^domain1.com$
      RewriteRule ^4433$ http://domain2.com/folder/?p=4433 [R=301,L]
      

      否则,正如 Benedikt Eger 所说,或者如果您想要真正的重定向,则使用 R=301。 或者,如果您希望它仅在数字上重定向,请执行以下操作:

      RewriteEngine On
      
      RewriteCond %{HTTP_HOST} ^domain1.com$
      RewriteRule ^([0-9])+$ http://domain2.com/folder/?p=$1 [R=301,L]
      

      RewriteCond 检查,如果定义的 vhost 是 domain1.com,但不是 domain2.com,则应用重写规则,并通过 HTTP 状态 301 [R=301] 仅数字字符串 (0-9)+ 由 at 组成指定 URL 的至少一个数字。 [L] 将此作为最后应用的规则。

      【讨论】:

      • 也许我忘了提及,但只有对 domain/4433 的访问才应该重定向到 domain.com/folder/?p=4333 “domain.com”单独不应重定向。
      • 你搞混了。 [(0-9)+] 应该是 ([0-9])+
      • 谢谢,秋葵。我已经修正了那个错字/thinko。
      猜你喜欢
      • 1970-01-01
      • 2014-02-28
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2014-10-09
      • 2012-01-27
      • 2015-10-24
      相关资源
      最近更新 更多