在 Plesk 中使用 .htaccess 创建子域名

在 Plesk 中使用 .htaccess 创建子域名

我正在尝试使用 .htaccess 将几个子域映射到我的 ROOT 中的目录(“map” 是正确的词吗?)

服务器使用 Plesk,我对此并不特别熟悉(cPanel 会自动处理)。所有子域都已添加为“域别名”,因此我现在需要做的就是指向正确的目录。

例如: 1. i.domain.com -> domain.com/i/ 2. js.domain.com -> domain.com/js/ 3. css.domain.com -> domain.com/css/

我尝试了很多我在 Google 和 Stack Overflow 上找到的代码片段。这是最接近的代码,它适用于 (1),但莫名其妙地失败了 (2) + (3),因为仍然指向 ROOT 而没有查看目录。

RewriteCond %{HTTP_HOST} ^i\.domain\.co\.uk$ [NC]
RewriteCond %{HTTP_HOST} ^js\.domain\.co\.uk$ [NC]
RewriteCond %{HTTP_HOST} ^css\.domain\.co\.uk$ [NC]
RewriteRule (.*) %1/$1 [L]

我承认我对 .htaccess 或 DNS 的工作原理不是特别了解,PHP 才是我的游戏。

任何帮助,都非常欢迎。

答案1

嗯,Plesk 处理事情的方式不同,所以您必须按照 Plesk 的方式做事 ;)

Plesk 中子域名的文档根目录如下,

/var/www/vhosts/domain.com/subdomains/subdomain/httpdocs

正如您的问题一样,要将 a.domain.com 指向 domain.com/a ,您不需要 .htaccess。只需更改文档根目录子域名 a.domain.com 指向 /var/www/vhosts/domain.com/httpdocs/a 。为此,您需要使用新的 DocumentRoot 设置将 vhost.conf 添加到子域名的 conf 目录中。

创建名为虚拟主机配置文件内容如下,

DocumentRoot /var/www/vhosts/domain.com/httpdocs/a

现在将此文件上传至/var/www/vhosts/domain.com/subdomains/subdomain/conf文件夹。

现在运行以下命令将自定义 conf 与其他 httpd 包含在一起。

/usr/local/psa/admin/bin/websrvmng -a

重新启动 apache,并确认子域名现在是否从正确的位置提供页面服务。

附言:有时 Plesk 版本很重要(对于您执行的命令),因此如果您在设置时遇到任何问题,请随时询问。

答案2

感谢您的回答 SparX - 我确信它是正确的,您显然对自己的东西很了解。

我的主机建议我不要使用 Plesk 中的标准子域目录结构,因为我需要主域 document_root 中大多数子域的 RWX 权限。

这意味着我必须删除上面几乎所有的 open_basedir 限制/var/www/vhosts/domain.com/。我没有意识到我造成了一些严重的安全问题——我们 PHP 开发人员的天真!

因此他们建议我将子域名添加到“域别名”中,将目录移动到主域的 document_root 并使用 .htaccess 重写请求。

经过整个周末的绞尽脑汁后,我在 Stack overflow 上找到了这个答案:https://stackoverflow.com/questions/4593978/redirecting-to-multiple-virtual-subdomains-using-htaccess

这导致我在主域的 .htaccess 中使用以下内容:

# Internal rewrite for the image subdomain
#  - Match the subdomain exactly
RewriteCond %{HTTP_HOST} ^i\.mydomain\.com$
#  - Check to see if the rewrite already happened (prevent
#    infinite loop of internal rewrites)
RewriteCond %{REQUEST_URI} !^/i(/.*|$)
#  - Rewrite the URL to the subdirectory
RewriteRule ^(.*) /i/$1 [L]

这解决了 i.mydomain.com 的问题,所以我只需将其复制到 c.domain.com 和 js.domain.com

相关内容