【问题标题】:htaccess redirect to subdomain based on query stringhtaccess 根据查询字符串重定向到子域
【发布时间】:2015-06-17 04:38:47
【问题描述】:

我搜索了类似的问题,但没有一个适用于我的情况。

我需要做的是从具有特定查询字符串的旧网址重定向:option=com_virtuemart 到子域:http://parts.domain.com

尝试了一堆规则和条件,但没有实现正确的重定向。它总是将我重定向到http://parts.domain.com/index.php?option=com_virtuemart

我尝试的一些规则:

RewriteCond %{QUERY_STRING} (^|&)option=com_virtuemart(&|$) [NC]
RewriteRule (.*) http://parts.domain.com/$1 [R=301,L]

RewriteCond %{QUERY_STRING} (^|&)option=com_virtuemart(&|$) [NC]
RewriteRule http://parts.domain.com/? [L,NC,R=301]

和其他 50 条规则一样。我在这里犯了什么错误?

【问题讨论】:

  • “它总是把我重定向到http://parts.domain.com/index.php?option=com_virtuemart这不是你想要的吗?...
  • 不,我想要的是 http://parts.domain.com 没有 QS 的其余部分

标签: php apache .htaccess redirect joomla


【解决方案1】:

如果您使用的是 parts.domain.com 根目录,那么您可以在 .htaccess 中执行此操作。

这对我有用,你真的不需要一个可以使用^ 的捕获组。还要确保清除缓存。

RewriteEngine On
RewriteCond %{QUERY_STRING} (^|&)option=com_virtuemart(&|$) [NC]
RewriteRule ^ http://parts.domain.com/? [L,NC,R=301]

或者你可以这样做。

RewriteEngine On
RewriteCond %{THE_REQUEST} [A-Z]{3,}\ /+(index\.php)?\?option=com_virtuemart [NC]
RewriteRule ^ http://parts.domain.com/? [R=301,L]

【讨论】:

  • 感谢您的回答。不,我实际上在http://www.domain.com 下,这是我需要处理旧网址的主要站点
  • 无论哪种方式,规则都很好。正如我最初在回答中所说的那样。当规则起作用时,您应该清除缓存。
  • 是的,谢谢,不知何故我错过了你清除缓存的建议......无论如何现在一切都很好:)
【解决方案2】:

你只需要结合你的规则。

RewriteCond %{QUERY_STRING} (^|&)option=com_virtuemart(&|$) [NC]
RewriteRule (.*) http://parts.domain.com/? [L,NC,R=301]

在第二个示例中,您没有提供要匹配的正则表达式。

【讨论】:

  • 感谢您的回答,但它再次奇怪地重定向到http://parts.domain.com/index.php?option=com_virtuemart
  • @Zota 在这种情况下,您可能应该清除缓存。如果 .htaccess 中没有其他规则,这应该可以正常工作。
  • 糟糕,我经常在 Firefox 下清除缓存,甚至是“硬清除”,但不知何故并没有清除。根据您的建议,我使用 IE 进行了尝试,您的规则运行良好!谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2012-11-23
  • 2012-06-08
相关资源
最近更新 更多