htaccess子域重写为变量而不在url中可见

时间:2014-01-27 09:08:40

标签: php .htaccess mod-rewrite url-rewriting

我需要使用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/

1 个答案:

答案 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