php - 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/test1像 https://sitename.net/username/tests/test1所以 index.php会做的东西...
解决方案
我认为通配符 DNS 记录是您正在寻找的。
https://en.wikipedia.org/wiki/Wildcard_DNS_record
然后所有子域将重定向到您的 DNS,您可以将其重定向到您的服务器。
编辑:一旦子域启动并运行,您可以使用 .htaccess 将子域重写到目录 来修复 htaccess。
推荐阅读
- express - express-graphql - 如何将 res 对象传递给上下文中的自定义函数?
- python - 需要在没有特定端口的域名中运行 django 应用程序
- c - 为什么动态分配的数组不会随着新数据的到来而更新?
- c++ - 为什么在分配 r 值参考时被视为左值参考?
- java - 擦除方法与另一种方法相同
- php - 从 glob 数组 PHP 中排除多个键
- javascript - 如何简洁地使用 lodash 更新嵌套的对象数组?
- cookies - 使用 Supertest 时未定义 request.cookies
- python - 我可以通过 django python 中的 model.py 插入到 db
- tpm - TPM 2.0:避免每次使用的密钥(重新)生成开销