【问题标题】:How do I redirect with .htaccess without changing the URL that was typed in?如何在不更改输入的 URL 的情况下使用 .htaccess 进行重定向?
【发布时间】:2015-04-01 03:18:33
【问题描述】:

目前我有[any_name].example.com 重定向到example.com/?id=[any_name]

这是我的 .htaccess 代码:

RewriteCond %{HTTP_HOST} !^www\.example.com
RewriteCond %{HTTP_HOST} ^(.+).example.com
RewriteRule ^([^/]*)$ http://example.com/?id=%1 [L,R=301]

如何更改我的 .htaccess 以使 foo.example.com 重定向到 example.com/?id=foo 但仍会在浏览器的地址栏中显示 foo.example.com

【问题讨论】:

  • foo.example.comexample.com 是否托管在具有相同文档根文件夹的同一台服务器上?
  • 是的,我使用的是通配符 (*.example.com),它指向与 example.com 相同的根文件夹

标签: .htaccess redirect rewrite subdomain wildcard


【解决方案1】:

当您使用R 标志时,或者如果您包含协议/域(例如http://example.com,mod_rewrite 将重定向浏览器而不是内部重写请求。重定向浏览器会导致浏览器加载新的 URL,这会更改地址栏中的 URL。您想要删除这些,以便拥有:

RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} !^www\.example.com
RewriteCond %{HTTP_HOST} ^(.+).example.com
RewriteRule ^([^/]*)$ /?id=%1 [L,QSA]

【讨论】:

  • 此解决方案不再更改显示的 URL,但我现在输入的任何子域都会出现“500 内部服务器错误”页面。
  • 现在几乎可以正常工作了。它正在执行内部重定向,但是 GET 变量未附加子域名。 foo.example.com 内部重定向到foo.example.com/?id=,就好像%1 不存在一样。
  • @ClaytonKirlew 尝试将查询字符串条件移到顶部,我不认为它会有所作为,但显然确实如此。
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2013-01-11
相关资源
最近更新 更多