首页 > 解决方案 > htaccess 以子域作为变量重写

问题描述

我有一个 sitename.net 并且在根目录中我有 .htaccess 和 index.php .htaccess 是:

FallbackResource /index.php

所以基本上因为它是空站点(没有子目录,没有文件等......)我将得到一个包含以下内容的 index.php 的后备:

$path = ltrim($_SERVER['REQUEST_URI'], '/');    // Trim leading slash(es)
$elements = explode('/', $path);                // Split path on slashes
echo "Domain is: $domain <br>";
if(empty($elements[0])) {                       // No path elements means home
    echo "ShowHomepage()";
} 
else switch(array_shift($elements)) {             // Pop off first item and switch
    case 'tests':
      echo "First is test";
    case 'sample':
      echo "First is sample";
    default:
        header('HTTP/1.1 404 Not Found');
        Show404Error();
}

我的问题是当访问者输入时:https://username.sitename.net/tests/test1 我收到错误,因为子域不存在......当我转到“ https://sitename.net/tests/test1 ”我得到了我想要的,但我也需要用户名作为变量。

我是否应该首先在 .htaccess 中重写,以便将https://username.sitename.net/tests/test1转换为https://sitename.net/username/tests/test1而不是重做 index.php,这样它会拾取第一个数组元素作为用户名还是有其他选择?

有人可以帮帮我吗?

- - - - - - - 编辑 - - - - - - - -

我最终将 A 记录 *.sitename.net 指向服务器 IP 我已更改 .htaccess 所以它是:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.*)\.sitename\.net
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]

FallbackResource /index.php

...并且仍然收到 404 错误...仍然无法获得: https://username.sitename.net/tests/test1https://sitename.net/username/tests/test1所以 index.php会做的东西...

标签: php.htaccess

解决方案


我认为通配符 DNS 记录是您正在寻找的。

https://en.wikipedia.org/wiki/Wildcard_DNS_record

然后所有子域将重定向到您的 DNS,您可以将其重定向到您的服务器。

编辑:一旦子域启动并运行,您可以使用 .htaccess 将子域重写到目录 来修复 htaccess。


推荐阅读