首页 > 解决方案 > .htaccess 动态子域

问题描述

我已经把头发拉了一段时间了。我想知道是否有一种方法可以使用 .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']);

标签: phpapache.htaccessmod-rewritesubdomain

解决方案


默认行为是重定向到 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 (您的意思)。


推荐阅读