问题
我需要将一些简短的方便 URL 重定向到更长的实际 URL。有问题的站点使用一组子域来标识一组开发或实时版本。
我希望将某些请求重定向到的 URL 包含 HTTP_HOST,这样我就不必为每个主机创建自定义 .htaccess 文件。
特定于主机的示例(从 .htaccess 文件中截取)
Redirect /terms http://support.dev01.example.com/articles/terms/
此示例适用于在 dev01.example.com 上运行的开发版本。如果我在 dev02.example.com 下运行的开发版本的主 .htaccess 文件中使用同一行,我最终会被重定向到错误的位置。
理想规则(不确定语法是否正确)
Redirect /terms http://support.{HTTP_HOST}/articles/terms/
此规则不起作用,仅作为我想要实现的目标的示例。然后我可以在许多不同的主机下使用完全相同的规则并获得正确的结果。
答案?
- 这可以用 mod_alias 完成还是需要更复杂的 mod_rewrite?
- 如何使用 mod_alias 或 mod_rewrite 实现这一点?如果可能,我更喜欢 mod_alias 解决方案。
澄清
我不会留在同一台服务器上。我愿意:
- http://example.com/terms/-> http://support .example.com/articles/terms/
- https://secure .example.com/terms/-> http://support .example.com/articles/terms/
- http://dev.example.com/terms/-> http://support .dev.example.com/articles/terms/
- https://secure .dev.example.com/terms/-> http://support .dev.example.com/articles/terms/
我希望能够在 example.com 和 dev.example.com 的 .htaccess 文件中使用相同的规则。在这种情况下,我需要能够将 HTTP_HOST 作为变量引用,而不是在请求重定向到的 URL 中逐字指定它。
我将按照建议研究 HTTP_HOST 参数,但希望有一个工作示例。
最佳答案
奇怪的是,没有人做过实际的工作答案(笑):
RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]
为了帮助您更快地完成工作,我最喜欢的正则表达式检查工具:
http://www.quanetic.com/Regex (不要忘记选择 ereg(POSIX) 而不是 preg(PCRE)!)
当您想要检查 URL 并查看它们是否有效时,您可以使用此工具。
关于.htaccess - 如何使用 .htaccess 重定向到包含 HTTP_HOST 的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72458/