Prevent executing .htaccess of parent folder

余生长醉 提交于 2020-01-14 10:28:10

问题


I have two different sites on same domain for example:
First site in the root directory http://example.com/
Second site in subfolder http://example.com/site2/
Each site have his own .htaccess
When i enter to second site (http://example.com/site2/), in log of mod_rewrite i see that apache trying to execute .htaccess of first site (http://example.com/).
So, the question is how to prevent this? Thanks


回答1:


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

inherit

This forces the current configuration to inherit the configuration of the parent. In per-virtual-server context, this means that the maps, conditions and rules of the main server are inherited. In per-directory context this means that conditions and rules of the parent directory's .htaccess configuration are inherited.

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




回答2:


While you can not stop the execution of the .htaccess in http://example.com

You CAN place another .htaccess in http://example.com/site2/ and any rule created here that overrides the rules in the .htaccess of the parent folder will be executed here but not in the parent folder.

For example, I recently had a case where I was rewriting any non-www version of my main site, which we'll call example.com to its www equivalent: www.example.com

The problem this caused is anyone going to my second site, which we'll call site2.com would actually redirect the user to www.example.com/site2.com/ even if the user enters site2.com OR www.site2.com OR http://www.site2.com in their browser's address input

What I had to do to fix it is makes changes in 2 .htaccess files, first in the root http://www.example.com then in a separate .htaccess located in http://www.example.com/site2.com/

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(this also forces the www version of 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]

Feel free to rip apart my regex, I am by no means a regex master. I also realize that this can creates 2 or maybe more extra redirects but this is the only way I could get this to work, without reassigning my DocumentRoot through through the host...which is probably a better option if your host can do it, mine would/could not...



来源:https://stackoverflow.com/questions/3639281/prevent-executing-htaccess-of-parent-folder

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!