.htaccess 通配符子域名重写故障排除

.htaccess 通配符子域名重写故障排除

我已经研究这个问题整整三天了,并在几个论坛上发布了帖子,但没有任何线索。

问题:

当用户输入 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.htmlhttp://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html

相关内容