如何使用.htaccess重定向到包含HTTP_HOST的URL?

时间:2008-09-16 13:52:30

标签: .htaccess mod-rewrite mod-alias

问题

我需要将一些简短的便捷网址重定向到较长的实际网址。相关网站使用一组子域来标识一组开发或实时版本。

我希望将某些请求重定向到的URL包含HTTP_HOST,这样我就不必为每个主机创建自定义.htaccess文件。

特定于主机的示例(从.htaccess文件中剪切)

Redirect /terms http://support.dev01.example.com/articles/terms/

此示例适用于在dev01.example.com上运行的开发版本。如果我在主.htaccess文件中使用相同的行来运行dev02.example.com下的开发版本,我最终会被重定向到错误的位置。

理想规则(不确定正确的语法)

Redirect /terms http://support.{HTTP_HOST}/articles/terms/

这条规则不起作用,仅仅是我想要实现的一个例子。然后,我可以在许多不同的主机下使用完全相同的规则,并获得正确的结果。

答案吗

  • 这可以用mod_alias完成,还是需要更复杂的mod_rewrite?
  • 如何使用mod_alias或mod_rewrite实现这一目标?如果可能的话,我更喜欢mod_alias解决方案。

澄清

我不会住在同一台服务器上。我想:

我希望能够在example.com和dev.example.com上的.htaccess文件中使用相同的规则。在这种情况下,我需要能够将HTTP_HOST称为变量,而不是在重定向请求的URL中直接指定它。

我将根据建议调查HTTP_HOST参数,但希望有一个有效的例子。

7 个答案:

答案 0 :(得分:3)

奇怪的是,没有人做过实际的工作答案(笑):

RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]

为了帮助您更快地完成工作,我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

如果您想检查网址并查看网址是否有效,请使用此工具。

答案 1 :(得分:0)

我认为您需要捕获HTTP_HOST值,然后在重写规则中使用它:

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/terms http://support.%1/article/terms [NC,R=302]

答案 2 :(得分:0)

如果我理解你的问题,你需要301重定向(告诉浏览器转到其他URL)。 如果我的解决方案不适合您,请尝试使用此工具:http://www.htaccessredirect.net/index.php并找出适合您的解决方案。

//301 Redirect Entire Directory
RedirectMatch 301 /terms(.*) /articles/terms/$1

//Change default directory page
DirectoryIndex 

答案 3 :(得分:-1)

根据这个备忘单(http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/png/),这应该可行

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1

请注意,我没有办法对此进行测试,所以这应该被视为正确方向的指针,而不是明确的答案。

答案 4 :(得分:-1)

如果你住在同一台服务器上,那么无论服务器如何,将它放在.htaccess中都会有效:

RedirectMatch 301 ^/terms$ /articles/terms/

产地:

http://example.com/terms -> http://example.com/articles/terms

或:

http://test.example.com/terms -> http://test.example.com/articles/terms

显然,您需要调整REGEX匹配等,以确保它能够应对您要投入的内容。 301也是如此,如果您不希望浏览器缓存重定向,则可能需要302.

如果你想:

http://example.com/terms -> http://server02.example.com/articles/terms

然后你需要使用HTTP_HOST参数。

答案 5 :(得分:-2)

您无需包含此信息。只需提供相对于root的URI。

Redirect temp /terms /articles/terms/

the mod_alias documentation中解释了这一点:

  

新URL应该是以方案和主机名开头的绝对URL,但也可以使用以斜杠开头的URL路径,在这种情况下,将添加当前服务器的方案和主机名。

答案 6 :(得分:-2)

听起来你真正需要的只是一个别名?

Alias /terms /www/public/articles/terms/