.htaccess动态子域

时间:2019-06-25 20:32:19

标签: php apache .htaccess mod-rewrite subdomain

一段时间以来,我一直在拔头发。我想知道是否可以使用.htaccess创建动态子域?我目前处于沙盒环境中,但我希望这样做:

awebsite.co.uk->直接访问index.php * .awebsite.co.uk->直接访问init.php

到目前为止,我已经设法将其整理并完成,但是,在参数方面我面临一个真正的问题。

*。adomain.co.uk/page会抛出404或500。我通过将一个自定义404设置为init.php来实现它的目的

我的问题是我有一条规则要从URL中隐藏.php,因此adomain.co.uk/apage将显示page.php,但是当我尝试完成上述操作时,这会弄乱。有人可以在这里向我指出正确的方向吗?我有通配符A记录等。但是我无法与托管服务提供商设置ServerAlias。

非常感谢

更新: .htaccess(当前)

Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

ErrorDocument 404 /sandbox/init.php

使用PHP进行操作应该很容易

$splitDomain = explode('.', $_SERVER['SERVER_NAME']);
// TODO: remove if not sandbox
$ReqPage = str_replace('/sandbox/', '', $_SERVER['REQUEST_URI']);
//$ReqPage = str_replace('/', '', $_SERVER['REQUEST_URI']);

1 个答案:

答案 0 :(得分:1)

默认行为是重定向到index.php,因此您只需要捕获非www子域即可。

怎么样:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$   [NC]
RewriteCond %{HTTP_HOST} !^www\.example\.com$  [NC]
RewriteRule ^ http://www.example.com/init.php  [L,R]

或者:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$   [NC]
RewriteCond %{HTTP_HOST} !^www\.example\.com$  [NC]
RewriteRule ^ init.php  [L]

第一个将重定向到init.php(您的要求),第二个将不进行重定向(您的意思是)调用init.php。