我有2个域名,都托管在hostgator(无限域名宝贝计划)上
1. foo.com(这是第一个在HG注册的域名)
2. bar.com(我在HG中将其添加为插件域)
目录结构有/public_html/
,它保存了foo.com
/public_html/
有一个名为bar
的子目录(即public_html/bar/
),它保留了bar.com的所有文件。这是由HG在插件域过程中设置的。所以bar.com的文件会显示如下:/public_html/bar/process.php
我想要这个:
sss.bar.com/fff
- > bar.com/process.php?sub=sss&file=fff
但是我的查找失败了。
这就是我尝试的:(这个文件是/public_html/bar/.htaccess
- 在foo.com的父目录中有一个单独的.htaccess,它有一个不相关的规则)
RewriteEngine On
# Parse the subdomain as a variable we can access in PHP, and
# run the main process.php script
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^www
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)$
RewriteRule ^(.*)$ /process.php?sub=%1
# Map all requests to the 'path' get variable in process.php
RewriteRule ^process\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /process.php?file=$1 [L,QSA]
试验:
1. bar.com/myFile
- >在[file] => myFile - good。的process.php中生成一个GET parm
2. test.bar.com/myFile
不起作用。
错误是:
找不到test.bar.com上的服务器,因为 DNS查找失败
bar.foo.com/file1
会产生[file] => /process.php [sub] => bar 我认为这可能是由于HG构建我的插件域的方式 - 作为子域。所以现在它认为我正在尝试重新映射子域的子域...如果这是有道理的。
感谢。
更新
添加了通配符子域并按如下所示修改了.htaccess之后,看起来好像它正在按需工作。
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^www
RewriteCond %{HTTP_HOST} !^bar\.com$
RewriteCond %{HTTP_HOST} ^(^.*)\.bar\.com$
RewriteRule ^(.*)/$ index.php?userId=%1&fileName=$1
答案 0 :(得分:1)
您的test.bar.com
子域很可能是全球DNS系统所不知道的。要知道,您必须在DNS系统中注册它。 (如果这仅供您私人使用而非公开使用,您可以使用系统/etc/hosts
文件将名称映射到服务器ip)
我认为Hostgator是Domain Name Registrar
(主域)和foo.com
(插件域)的bar.com
和你拥有域控制面板(CPanel / Plesk /等)的访问权限,以执行所需的操作。
当您为主域(bar.com
)购买了插件域(foo.com
)时,Hostgator会设置DNS CNAME
(规范名称记录 )记录 www
。bar.com
指向主域的相同Host
记录(也称为A记录/地址记录),以便两个域共享相同的主机。因此,您现在必须对 test
。bar.com
子域执行相同的操作。你可以在Hostgator找到一个简短的指南:How to change DNS zones (MX, CNAME, and A records)
注意:对DNS记录的更改可能需要几个小时才能生效。
每次想要新的子域时,每次手动设置它们都会很烦人。许多域名注册商(包括Hostgator)也支持名为WildCard域的功能。它们允许您对指向主域的*
记录使用CNAME
(通配符)。这使得whatever.bar.com
指向同一地址www.bar.com
。
为了支持您的主要,插件域及其子域的各个站点,Apache使用基于域名的虚拟主机。如果要将whatever.bar.com
的同一站点加载为www.bar.com
,Apache会在ServerAlias
指令中允许*
通配符。确保在*.bar.com
VirtualHost配置中设置www.bar.com
作为ServerAlias。否则,您必须为每个子域设置单独的VirtualHost配置
注意:还有一个VirtualDocumentRoot
apache指令,可用于根据域名提供单独的文档根。
答案 1 :(得分:0)
输入:http://mary.bar.com/awesome/
结果:index.php GET parms:
Array
(
[userId] => mary
[fileName] => awesome
)
这是最后的.htaccess一旦设置了通配符子域我就开始工作了.htaccess添加了解释(主要是为了帮助我)
Options +FollowSymlinks
RewriteEngine On
# 1. Parse the subdomain as a variable we can access in PHP
# 2. Parse out the filename (must have a trailing "/" on the end)
# 3. Pass the vars into index.php script
# Make sure a wildcard subdomain is setup (takes 24-48hrs to propagate) and points to the addon domain folder
# ex: "public_html/addon-domain-name.tld"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# make sure we don't process "www.domain.com" or "domain.com". This will just default to index.php with no GET vars
RewriteCond %{HTTP_HOST} !^www
RewriteCond %{HTTP_HOST} !^bar\.com$
# This part pulls out the subdomain from the front of the URL & stores it in "%1"
# Note: it is possible that the subdomain can have multiple parts (ex bob.smith.domain.com) and still work
# The user id is either numeric or string [Aa-Zz], so add error checks inside index.php
RewriteCond %{HTTP_HOST} ^(^.*)\.bar\.com$
# IMPT: do not rewrite the rule until the trailing filename is parsed out
# otherwise .htaccess will try to parse out something from index.php
# Parse out the filename that comes after domain.com (stored in "$1"). A trailing "/" is required.
RewriteRule ^(.*)/$ index.php?userId=%1&fileName=$1