使用mod_rewrite而不是VirtualHost

时间:2016-01-09 00:42:47

标签: apache .htaccess mod-rewrite

我使用的托管服务不支持VirtualHost,是否可以使用mod_rewrite将域映射到目录?如果有人访问domain1.com,我希望服务器从domain1目录返回文件。即转到http://domain1.com/file.html会返回/path/domain1/file.html

这是我尝试的内容:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(?:www\.)?domain1\.com$ [NC]
RewriteRule (.*) /domain1$1 [L]

RewriteCond %{HTTP_HOST} ^(?:www\.)?domain2\.com$ [NC]
RewriteRule (.*) /domain2$1 [L]

这导致500,但我的错误日志并没有给我任何有用的信息。

2 个答案:

答案 0 :(得分:0)

不是真的。 mod_rewrite只在Web服务器已经找出要查找文件的目录之后启动 - 如果还没有某种虚拟主机指令将该域指向您的文档根目录,那么Web服务器将不会最终查看你的.htaccess文件。

可以根据HTTP_HOST设置重写条件(例如,强制使用多个主机名已指向您网站的特定主机名),但不能用它来创建全新的虚拟主机。

尽管如此,那些.htaccess指令通常不会导致500错误。你的主机可能没有启用mod_rewrite吗?如果是这样,请让他们打开它,或找到另一个可用的Web主机。 (这是一个非常基本的标准功能,并不会让它变得荒谬。)

答案 1 :(得分:0)

在路由到同一目录之前,您需要检查REQUEST_URI中是否存在/domain/,否则您的规则将无限循环,最终导致500错误。

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(?:www\.)?domain1\.com$ [NC]
RewriteRule ^((?!domain1/).*)$ domain1/$1 [L,NC]

RewriteCond %{HTTP_HOST} ^(?:www\.)?domain2\.com$ [NC]
RewriteRule ^((?!domain2/).*)$ domain2/$1 [L,NC]