框架 - 通配符子域网站/user/username到username.website.com

时间:2017-02-21 08:19:55

标签: php routing subdomain wildcard

我遇到了通配符子域路由问题。我添加了*.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/contactusername.website.com/news/id/news-name.html等。

我该如何解决这个问题?

2 个答案:

答案 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上模拟解决方案