我遇到了通配符子域路由问题。我添加了*.website.com
并添加了服务器别名。 subdomain.website.com
显示website.com
。
但我希望subdomain.website.com
显示website.com/user/username/
。 print_r($_GET)
返回array([user/username] => )
。
PS:每个其他网页(例如联系人,关于页面等)都将显示为username.website.com/page
(其他示例:username.website.com/contact
,username.website.com/news/id/news-name.html
等。
我该如何解决这个问题?
答案 0 :(得分:0)
如果我转到url:subdomain.example.com/test - > print_r($ _ GET)告诉我:
Array([user/subdomain], [test])
如果我去网址:example.com/user/subdomain/test - > print_r($ _ GET)告诉我:
Array([user/subdomain/test])
这是我的htaccess代码:
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC]
RewriteRule (?!^$)^.*$ http://example.com/user/%1 [P,NC,L]
所以,我已经用这样的方式在Router中编辑了我的代码:
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$method = $_SERVER['REQUEST_METHOD'];
if(array_key_exists('HTTP_X_FORWARDED_HOST', $_SERVER) && count($_GET) >= 2) {
$subdomain = $_SERVER['HTTP_X_FORWARDED_HOST'];
$sub = str_replace('.'.$_SERVER['SERVER_NAME'], '', $subdomain);
$arr = array_keys($_GET);
$uri = $uri.'/'.$arr['1'];
}
if(array_key_exists('HTTP_X_FORWARDED_HOST', $_SERVER) && count($_POST) >= 2) {
$subdomain = $_SERVER['HTTP_X_FORWARDED_HOST'];
$sub = str_replace('.'.$_SERVER['SERVER_NAME'], '', $subdomain);
$arr = array_keys($_POST);
$uri = $uri.'/'.$arr['1'];
}
但我认为必须有更好的方法。非常感谢您的帮助,建议:)
答案 1 :(得分:0)
现在它只是逻辑但我建议避免在.htaccess上做不必要的复杂事情,在PHP上进行路由,只在.htaccess上进行友好的URL,你可以验证是否是子域并在PHP bootstrap index.php上模拟解决方案