我正在尝试使用apache中的url屏蔽来处理通配符子域。 正确的重写规则应该达到以下目的:
http://demo.system.dev
至to http://system.dev?subdomain=demo
http://sample.system.dev/user/edit/100
至to http://system.dev/user/edit/100?subdomain=sample
http://debug.system.dev/project/edit/new
至to http://system.dev/project/edit/new?subdomain=debug
到目前为止,我的.htaccess
中有以下规则RewriteCond %{HTTP_HOST} ^(.*)\.system\.dev
RewriteRule ^(.*?)$ http://system.dev%{REQUEST_URI}?subdomain=%1 [L]
除了浏览器网址也被更改之外,看起来工作正常。我希望浏览器网址保持不变并在内部路由请求,但我不知道如何实现这一点。
答案 0 :(得分:1)
您无法在内部重写到其他域。因此,当您转到子域时,它将重定向到主域。因此,您需要使用相对URL,看看它是否适合您。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^(www\.)?system\.dev [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.system\.dev [NC]
RewriteRule ^(.*)$ %{REQUEST_URI}?subdomain=%1 [L]
答案 1 :(得分:0)
在根目录中尝试此规则.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !(?:^|&)subdomain= [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.system\.dev$ [NC]
RewriteRule (.*) $0?subdomain=%1 [L,QSA]