我已经研究这个问题整整三天了,并在几个论坛上发布了帖子,但没有任何线索。
问题:
当用户输入 SUBDOMAIN.domain.com 时,我希望它在 URL 窗口中保持这种状态。
这些文件的实际位置是 domain.com/apps/SUBDOMAIN
我知道使用 .domain.com DNS A 记录(我已经完成)和 .htaccess 规则可以实现这一点。
这是我目前的 .htaccess 规则
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.domain\.com$ [NC]
RewriteRule !^([a-z0-9-]+)($|/) /apps/%2%{REQUEST_URI} [PT,L]
好的,这几乎可行了。
输入 subdomain.domain.com 正在从 domain.com/apps/subdomain 读取
但事情开始变得非常糟糕。
访问 subdomain.domain.com/image.jpg (又名 domain.com/apps/subdomain) 可以正常工作
访问 subdomain.domain.com/anyfolder/image.jpg (又名 domain.com/apps/subdomain) 将返回 404
查看 Cpanel 错误日志显示此信息
[Thu Nov 18 20:48:50 2010] [error] [client ***.**.***.***] File does not exist: /home/domain/public_html/images, referer: http://subdomain.domain.com/apps/subdomain/
因此,它似乎是在第一个目录的基础上正确重写,但任何低于该目录的内容都会被发送回 public_html 根目录
非常感谢所有帮助和建议
谢谢,
蒂姆
附言:由于我是新用户,因此我必须删除正确的超链接格式。
答案1
如果我错了,请纠正我,但是你有重写规则:
RewriteRule !^([a-z0-9-]+)($|/) /apps/%2%{REQUEST_URI} [PT,L]
说:仅^([a-z0-9-]+)($|/)
当不是匹配。当您的 URL 路径为 时/anyfolder/image.jpg
,上述内容将匹配(^anyfolder/
),因此重写规则将不是运行,因此您基本上将继续subdomain.domain.com/anyfolder/image.jpg
。
以下 SO 问题也有类似的要求:
在他的回答中,glavić 给出了应该有效的回应,还给出了以下链接:
尝试一下,它应该可以正常工作。
答案2
你能编辑 httpd.conf 吗?使用动态虚拟主机似乎更直接。查看http://httpd.apache.org/docs/2.2/vhosts/mass.html和http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html