.htaccess 基于用户名使用htaccess动态创建子域

zbdgwd5y  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(100)

我有一个问题,我需要知道如何动态创建一个子域。

http://example.com/user.php?id=ajithjojo

我希望它能像

http://ajithjojo.example.com/

这是怎么可能的。我检查了所有的StackOverflow讨论,但我没有得到一个正确的答案,我需要什么

o8x7eapl

o8x7eapl1#

这与htaccess无关。您可以设置您的Web服务器,使 *. example.com指向一个特定的公共根目录。在该公共根目录中驻留了一个php脚本,该脚本检查数据库以查看host / username是否存在。
因此,第一个URL在数据库中创建了一条记录,表明ajithjojo存在,然后当访问第二个URL时,脚本看到该域存在,然后执行动态操作。
如果它不存在,则脚本将抛出404标头,或重定向到某个位置。

4xy9mtcn

4xy9mtcn2#

你要么需要实现一些逻辑来向apache http服务器添加虚拟主机(复杂且有问题),要么使用默认主机(一个响应所有由现有vhost * 不 * 处理的传入请求的主机),并在其中实现内部重写规则。这允许你简单地分发对这样的“子域”(实际上是主机名)的引用。
这些重写规则可能如下所示:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRUle ^ %{REQUEST_URI}?user=%1 [END]

显然,您需要根据实际设置来调整它,但它应该为您指明正确的方向。例如,您可以使用一个实现来评估所请求的主机,而不是像上面所示的那样依赖于一个特定的http get参数。但这些都是您必须自己决定的实现细节。
如果收到内部服务器错误(http status 500)使用上面的规则,那么很可能你操作的是一个非常旧版本的apache http服务器。在这种情况下,你会在http服务器的错误日志文件中看到一个明确的提示,一个不受支持的[END]标志。你可以尝试升级或使用旧的[L]标志,在这种情况下它可能会起同样的作用,不过这取决于您的设置。
此实现在http服务器主机配置或动态配置文件中的工作方式与此类似(“.htaccess”文件)。显然重写模块需要在http服务器中加载并在http主机中启用。如果您使用动态配置文件,则需要注意在主机配置中启用它的解释,并且它位于主机中。的DOCUMENT_ROOT文件夹中。
还有一句话:您应该总是倾向于将这些规则放在http服务器主机配置中,而不是使用动态配置文件(.htaccess)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,并且它们确实会降低http服务器的速度。它们仅作为最后一个选项提供,用于您无法访问真正http服务器主机配置的情况(请阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这显然是一个安全噩梦)。

zlwx9yxi

zlwx9yxi3#

按照this教程设置基于用户名的子域

相关问题