Htaccess文件夹重写



我一直在这里阅读关于htaccess文件夹重写的多个帖子,但似乎没有一个适合我的问题(适当)。

我的问题是

我在服务器上有两个子文件夹,website1和website2。

当用户访问www.foo.com时,我希望视觉url保持不变,但希望服务器URI转到/website1/,在那里它将为website1加载index.php

然后我想要同样的事情,只有当用户去www.bar.com再次url不改变,但这次它链接到/website2/,它将加载索引php的第二个网站。

我真的很感激你的帮助,因为我还在学习如何重写。举例说明将是高度赞赏。此外,如果有任何最佳实践建议(如果有的话),也将不胜感激。

KingCrunch是正确的——设置这样的环境的正确方法是在Apache配置文件中使用<VirtualHost>指令。

如果,无论出于什么原因,这需要通过重写和。htaccess来完成…然后你需要启用mod_rewrite,并允许.htaccess文件包含重写规则(AllowOverride指令)。

规则如下:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
# rule #1
RewriteCond %{HTTP_HOST} =www.foo.com
RewriteCond %{REQUEST_URI} !^/website1/
RewriteRule (.*) /website1/$1 [L]
# rule #2
RewriteCond %{HTTP_HOST} =www.bar.com
RewriteCond %{REQUEST_URI} !^/website2/
RewriteRule (.*) /website2/$1 [L]

这段代码要放在根目录下的。htaccess文件中。如果放置在其他地方(例如配置或虚拟主机上下文),可能需要进行一些调整。

第一条规则是www.foo.com,第二条规则是另一个域名。这些规则几乎是一样的。我们告诉Apache检查域名(通过{HTTP_HOST}请求变量),如果它匹配我们的域名重写(内部重定向)URL到一个文件夹更深。第二个条件是防止重写循环(不重写已经重写的URL)。这是必要的,因为Apache在执行重写之后,会进入下一个重写迭代(这就是它的工作方式),并且需要这个条件来停止循环。

有用链接:http://httpd.apache.org/docs/current/rewrite/

我认为你只需要使用RewriteCond和RewriteRule指令。看看http://httpd.apache.org/docs/1.3/misc/rewriteguide.html上的"虚拟用户主机"。逻辑是一样的。(我认为)。