我需要改写:
laptop.example.com
至www.example.com/?c=1
。 phone.example.com
至www.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]
希望我不会遇到其他重写的情况再次搞砸了它!
答案 0 :(得分:1)
您的规则正在重定向,因为您在重写规则的目标中有http://
或https://
,它隐式地重定向302。如果2个主机位于不同的Web服务器或文档根目录,则需要使用反向代理才能使浏览器的地址栏不会更改。但看起来(在查看您的实际网站后)两台主机位于同一台服务器上并共享同一个根。所以你只需要摆脱目标中的http://www.findbyall.com
:
RewriteCond %{HTTP_HOST} ^laptop.findbyall.com$ [NC]
RewriteRule ^(.*)$ /?c=1$1 [QSA,L]
如果您不希望它与所有内容匹配,您可能还想将^(.*)$
正则表达式更改为^/?$
。