首页 > 解决方案 > .htaccess 文件中的动态子域处理,用于 xxx.domain.com 重定向到 ../users 文件夹

问题描述

这就是我所在的地方。我擅长 CodeIgniter 和通用 LAMP,但不擅长 .htaccess。我在用户创建设置中设置动态子域的 PHP 处理。认为 mydomain.com 可以创建和访问 user.mycomin.com 并提供页面。

设计是这样的。在 Apache 服务器的文档根目录中,有一个“用户”文件夹将容纳每个用户。

所以 /var/www/html 是 docroot,用户文件夹位于 /var/www/html/Users/(user)

所以理想情况下,我希望用户创建他们的帐户,然后我的 PHP 控制器运行然后 pow!他们的 (user).mydomain.com 页面已创建。

我更改了名称服务器,以便 *.mydomain.com 解析为我的静态 IP。那里没有问题。

问题在于 .htaccess 文件。我在 StackOverflow 中尝试了很多建议,但我被困在两件事上。

这是我到目前为止所尝试的,但我被卡住了。

为了澄清。 -

如果我去我的文档根目录并创建一个文件夹 xxx. 然后创建一个 index.php 文件,上面写着“它可以工作”。我应该能够访问 xxx.mydomain.com 并获得一个简单的页面,上面写着“它可以工作”

文件夹是:(docroot)/Users/xxx 域是:mydomain.com 子域是:xxx.mydomain.com

所以我想要做的就是获取一个条目:xxx.mydomain.com 来服务位于 (docroot)/Users/xxx 的网站

对于大多数在线建议,它会将 xxx.mydomain.com 附加到 /Users/xxx 以便 url 是 xxx.mydomain.com/Users.xxx 时它只需要是 xxx.mydomain.com

但浏览器中显示的 URL 应始终保持为 xxx.mydomain.com 而不是 xxx.mydomain.com/Users/subdomain(无论 xxx 是什么,它的字面意思都是子域)

目前我要么得到:

xxx.mydomain.com/Users/subdomain 的 URL(字面意思是子域)或 500 服务器错误

我在不同的文章中尝试了几种不同的建议。这是一个这样的建议。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^([a-z0-9/-]+)\.mydomain\.com$
RewriteCond ${REQUEST_URI} ^/Users/$1/

#Below Required for CodeIgniter

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L] 

我想要完成的不是将 /Users/xxx 附加到 URL。我想重定向到基于我的(docroot)的文件夹 /Users/xxx,同时将 xxx.mydomain.com 保持为 URL。

任何建议都非常感谢

标签: php.htaccesslamp

解决方案


由于捕获发生在RewriteCond而不是RewriteRule,您应该使用%1,而不是$1。从文档中:

除了纯文本之外,替换字符串还可以包括

  1. 对 RewriteRule 模式的反向引用 ($N)
  2. 对最后匹配的 RewriteCond 模式的反向引用 (%N)
  3. [...]

您还有两个RewriteCond没有 no RewriteRule,这意味着所有四个条件都必须匹配Rule才能应用最后一个条件。

尝试以下操作:

RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.mydomain\.com$
RewriteCond %{REQUEST_URI} !^/Users   # Stop the rewrite if the URL already contains /User
RewriteRule (.*) /Users/%1/$1 [L]

停止条件是必要的,因为每当 URI 因重写而发生更改时,apache 都会RewriteRules再次重新评估所有内容。您可以在此处查看处理的工作原理。


推荐阅读