如何使用htaccess将laptop.example.com重写为www.example.com/?c=1

时间:2013-01-05 04:25:58

标签: .htaccess mod-rewrite

我需要改写:

  • laptop.example.comwww.example.com/?c=1
  • phone.example.comwww.example.com/?c=2

它不必是动态的或任何东西。我只想要一些硬编码的重写。

目前我正在尝试这个,它正在重定向,而不是重写:

RewriteCond %{HTTP_HOST} ^laptop.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/?c=1$1 [QSA,L]

mod重写语法对我来说是如此令人困惑,我无法用它做头或尾。

我不想做301重定向。我想进行URL重写,以便用户看到没有参数的原始子域URL,但在内部它将作为后者发送。

我的.htaccess文件中已经有几次重写; 重写后应该应用它们。

我在SO中查看过十几个类似的问题。但我无法将答案转换为我的具体需求;我无法找出我错过的东西或我做错了什么。这就是为什么我再次专门针对我的情况提出这个问题。


工作代码:

RewriteCond %{HTTP_HOST} ^laptop.example.com$ [NC]
RewriteRule ^/?$ ?c=1$1 [QSA,L]

希望我不会遇到其他重写的情况再次搞砸了它!

1 个答案:

答案 0 :(得分:1)

您的规则正在重定向,因为您在重写规则的目标中有http://https://,它隐式地重定向302。如果2个主机位于不同的Web服务器或文档根目录,则需要使用反向代理才能使浏览器的地址栏不会更改。但看起来(在查看您的实际网站后)两台主机位于同一台服务器上并共享同一个根。所以你只需要摆脱目标中的http://www.findbyall.com

RewriteCond %{HTTP_HOST} ^laptop.findbyall.com$ [NC]
RewriteRule ^(.*)$ /?c=1$1 [QSA,L]

如果您不希望它与所有内容匹配,您可能还想将^(.*)$正则表达式更改为^/?$