我正在尝试使用.htaccess将几个子域映射到我的ROOT中的目录(是“映射”的正确词汇吗?)
服务器使用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)工作使我最接近的代码,但是通过仍然指向ROOT而不在目录中寻找(2)+(3)的莫名其妙的失败。
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是我的游戏。
任何帮助,非常欢迎。
那么,Plesk处理不同的事情,所以你必须做的事情,Plesk的方式;)
Plesk中一个子域的文档根目录就像是,
/var/www/vhosts/domain.com/subdomains/subdomain/httpdocs
就像你的问题一样,把a.domain.com指向domain.com/a,你不需要.htaccess。 只需更改指向/var/www/vhosts/domain.com/httpdocs/a的子域a.domain.com的DocumentRoot 。 为此,需要使用新的DocumentRoot设置将vhost.conf添加到子域的conf目录。
用下面的内容创build一个名为vhost.conf的文件,
DocumentRoot /var/www/vhosts/domain.com/httpdocs/a
现在将该file upload到/var/www/vhosts/domain.com/subdomains/subdomain/conf文件夹。
现在运行以下命令,将自定义conf和其他httpd包含在一起。
/usr/local/psa/admin/bin/websrvmng -a
重新启动Apache,并确认子域现在是否从正确的位置提供页面。
PS:有时Plesk版本很重要(对于执行的命令),所以请随时询问是否有任何麻烦设置。
谢谢你的回答SparX – 我确定它是现货,你清楚地知道你的东西。
我的主机build议我不要在Plesk中使用标准的子域目录结构,因为我需要来自主域document_root的绝大多数子域的RWX权限。
这意味着我不得不删除/var/www/vhosts/domain.com/上的所有open_basedir限制。 我没有意识到我造成了一些巨大的安全问题 – 我们PHP开发人员的天真!
所以他们build议我将我的子域添加到“域别名”中,将目录移动到主域的document_root中,并使用.htaccess重写请求。
整个周末的头发拉,我发现堆栈溢出这个答案: 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