阻止执行父文件夹的.htaccess

时间:2010-09-03 20:12:20

标签: apache .htaccess mod-rewrite

我在同一个域名上有两个不同的网站,例如:
根目录中的第一个站点 http://example.com/
子文件夹中的第二个网站 http://example.com/site2/
每个站点都有自己的.htaccess
当我进入第二个站点( http://example.com/site2/ )时,在mod_rewrite的日志中,我看到apache尝试执行第一个站点的.htaccess( http://example.com/ )。
那么,问题是如何防止这种情况? 谢谢你

2 个答案:

答案 0 :(得分:2)

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions

<强>继承

  

这会强制当前配置继承其配置   父母。在每个虚拟服务器上下文中,这意味着地图,   主服务器的条件和规则是继承的。在   每个目录上下文这意味着条件和规则   父目录的.htaccess配置是继承的。

     
    

Rules inherited from the parent scope are applied after rules specified in the child scope.

  

答案 1 :(得分:1)

虽然您无法在http://example.com

中停止执行.htaccess

您可以在http://example.com/site2/中放置另一个.htaccess,此处创建的任何规则将覆盖父文件夹的.htaccess中的规则将在此处执行,但不会在父文件夹中执行。

例如,我最近有一个案例,我正在重写我的主站点的任何非www版本,我们将其称为example.com到其等效的www:www.example.com

这导致的问题是有人进入我的第二个网站,我们称之为site2.com实际上会将用户重定向到www.example.com/site2.com/,即使用户输入了site2.com或www。 site2.com或浏览器地址输入中的http://www.site2.com

我需要做的就是修改2 .htaccess文件,首先在根http://www.example.com中进行更改,然后在位于http://www.example.com/site2.com/

的单独.htaccess中进行更改

1)http://www.example.com .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

2)http://www.site2.com(http://www.example.com/site2.com/).htaccess(这也会强制使用www2版本的site2.com):

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.site2\.com$ [NC]
RewriteRule ^(.*)$ http://www.site2.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^site2\.example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com/site2\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.site2\.example\.com$
RewriteRule ^/?$ "http\:\/\/www\.site2\.com\/" [R=301,L]

随意撕开我的正则表达式,我绝不是一个正则表达式大师。我也意识到这可以创建2个或更多的额外重定向,但这是我可以让它工作的唯一方法,而无需通过主机重新分配我的DocumentRoot ...如果您的主机可以这样做,这可能是更好的选择,我会/不会......