我有一个通配符子域的htaccess重写,它将foo.domain.com重写为domain.com/index.php?id=foo。这是使用以下命令完成的:
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteCond %{HTTP_HOST} ^((www\.)?([a-z]+)\.)domain\.com [NC]
RewriteRule .? index.php?id=%3 [L]这可以正常工作,但网站上的所有内容都引用根目录,例如:
"/content/imgs/logo.jpg" or "/ajax/upload.php"通配符子域会更改根目录,所有内容都会被引用:
"http://foo.domain.com/content/imgs/logo.jpg"并且找不到内容,因为它不在这个子域上。
我知道您可以使用html < base >标记在所有href位置上放置前缀,但这对ajax请求的javascript没有帮助。
在htaccess中有什么可以解决这个问题的方法吗?
谢谢。
发布于 2011-01-26 22:46:10
我想我可能有解决你问题的办法了!
您的重写条件正应用于所有包含的内容,如ass css/js/images等。这意味着它试图将此内容重写为index.php?id=%3而不是style.css。
通过在条件上方添加行RewriteCond %{REQUEST_FILENAME} !-f并将整个条件放在htaccess的底部,意味着它将仅应用于不存在的文件/目录(即,仅适用于通配符子域)。
尝试以下操作:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteCond %{HTTP_HOST} ^((www\.)?([a-z]+)\.)domain\.com [NC]
RewriteRule ^(.*)$ "http://domain.com/index.php?id=%3" [L,P]希望这能帮助你交配!
W。
发布于 2011-01-25 04:32:38
好的,现在有一个问题,你没有在你的重写规则中指定目标域。如果来自除www以外任何子域的所有请求都需要重定向,则应指定如下内容:
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteCond %{HTTP_HOST} ^((www\.)?([a-z]+)\.)domain\.com [NC]
RewriteRule .? http://www.domain.com/index.php?id=%3 [L]这样做的另一个问题是忽略了foo.domain.com之后的文件路径,这样所有请求都会被重定向到域/index.php?id=foo,而不管请求的文件是页面还是图像。
一种更好的方法可能是给每个“子域”分配自己的文件夹,例如
RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteCond %{HTTP_HOST} ^((www\.)?([a-z]+)\.)domain\.com [NC]
RewriteRule ^(.*)? http://www.domain.com/%3/$1 [L]因此,像foo.domain.com/content/imgs/logo.jpg这样的路径将指向domain.com/foo/content/imgs/logo.jpg
https://stackoverflow.com/questions/4785658
复制相似问题