我需要使用htaccess将“子域”转换为变量。 但我不希望在重写后显示原始网址。
这是我到目前为止所拥有的:
rewritecond %{http_host} ^([A-Za-z0-9-]+)\.mysite.\com$ [nc]
rewriterule ^(.*)$ http://www.mysite.com/$1?aff=%1 [nc]
但它似乎不起作用。
我需要的是以下内容:
用户链接:
aff1.mysite.com
显示的网址更改为:
www.mysite.com/
但是服务器读取的实际网址是:
www.mysite.com/?aff=aff1
我也将添加语言,所以我甚至可能需要以下内容:
用户链接至:aff1.mysite.com
然后我从Cookie {HTTP_COOKIE} lang=([A-Za-z]+)$
如果Cookie中没有任何内容,则默认值应为“en
”
然后用户被重定向到aff1.en.mysite.com
然后应将其显示为:www.mysite.com/en/
但是服务器:www.mysite.com/?lang=en&aff=aff1
请告诉我这是可能的,以及我如何实现这一目标。我很难重写。我已经查看了其他问题并尝试了他们的解决方案,但不知何故无法使其完全符合我的需要。
另外...... www.mysite.com
不应该转到www.mysite.com/aff=www
应该转到/mysite.com/en/
答案 0 :(得分:0)
所以,我花了比我想要更多的时间,但终于有了一些工作。我没有在网址中传递变量,而是放弃了一个cookie(这最终是我在页面上做的事情,但是这样做了一步 - 我不知道你可以通过重写丢弃cookie)
如果有人使用更少行代码获得更好的解决方案,请随时发表评论或发布新答案。
RewriteEngine On # Turn on the rewriting engine
RewriteCond %{http_host} ^www.example.info [nc] #if url starts with www.example.info
RewriteRule ^(.*)$ http://example.info/$1 [r,nc] #rewrite without the www
RewriteCond %{http_host} ^www.(.*).example.info [nc] #if url starts with www.(aff).example.info
RewriteRule ^(.*)$ http://%1.example.info/$1 [r,nc] #rewrite without the www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{http_host} ^(.*)\.example.info [nc] #if subdomain is aff
RewriteRule ^(.*)$ - [co=aff:%1:example.info:7200:/] #drop/update cookie with aff
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{http_host} ^(.*)\.example.info [nc] #if subdomain is aff
RewriteRule ^(.*)$ http://example.info/$1 [nc,R,L] #rewrite without subdomain