Apache mod_rewrite-想要文件系统重定向而不是301重定向吗

Apache mod_rewrite-想要文件系统重定向而不是301重定向吗,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我在运行Apache的共享web主机上安装了example1.com。它有一个example1.com/foo目录。我现在希望example2.com提供example1.com/foo中的相同内容,但example2.com根目录除外,URL中没有插入目录。与example2.com/bar.html类似,example1.com/foo/bar.html应该提供与example1.com/foo/bar.html相同的内容 RewriteEngine on RewriteCond %{HTT

我在运行Apache的共享web主机上安装了example1.com。它有一个example1.com/foo目录。我现在希望example2.com提供example1.com/foo中的相同内容,但example2.com根目录除外,URL中没有插入目录。与example2.com/bar.html类似,example1.com/foo/bar.html应该提供与example1.com/foo/bar.html相同的内容

RewriteEngine on
RewriteCond %{HTTP_HOST} example2.com$ [NC]
RewriteRule ^(.*)$ foo/$1 [NC]
这个简单的重写规则接受任何针对example2.com的请求,并插入foo/to指向该目录中的内容。问题是它一直在执行外部301重定向。我不希望这样,我希望当Apache在文件系统中提供来自/foo的内容时,浏览器保持在example2.com上而不重定向

Apache mod_rewrite文档已经过好几次了,这些文档说明了如何使用[R]标志强制301重定向,但没有说明如何强制它不发生。我错过了什么?它在我的Linux共享主机和在Windows上使用Apache进行的本地测试上的行为都是相同的


谢谢

我知道了。301发生的原因是我在规则中的目录名错误。因此,规则的结果指向一个不存在的路径,这使得Apache试图从文件系统重定向回退到301重定向

然后我必须修复一个无限循环,因为上面的规则总是将“foo”添加到URL,即使它已经存在,所以我会得到foo/foo/foo/。只有当它还没有出现时,我们才需要添加它。必须使用这个两步规则,因为不能在负规则的捕获组中使用通配符。但这似乎是可行的,当主机为example2.com且URL中不包含“foo”时,添加“foo”


两个域的DocumentRoot是否相同?是。我没有能力在共享web主机上更改它。实际上,我现在看到我真正想做的是让DocumentRoot在两个不同的域中表现不同。但我无法更改共享web主机上的服务器配置。是否可以通过基于http_主机的.htaccess中的mod_重写规则重新映射DocumentRoot?我对此表示怀疑,因为Apache首先需要DocumentRoot设置为find.htaccess。
RewriteEngine on
RewriteCond %{HTTP_HOST} example2.com$ [NC]
RewriteRule !^foo - [C]
RewriteRule ^(.*)$ foo/$1 [NC,PT]