root和子文件夹中的.htaccess,每个都重定向到自己的index.php

时间:2011-05-23 13:15:26

标签: .htaccess subdirectory mod-rewrite

我为一个看似重复的问题道歉,但我看过的几十个问题实际上都没有同样的问题。

我有以下目录结构:

/.htaccess
/index.php
/subfolder/.htaccess
/subfolder/index.php

我希望/index.php处理所有网页请求,除非请求开始/subfolder,在这种情况下应由/subfolder/index.php处理

  • e.g。 /abc要重写为/index.php?u=abc
  • e.g。 /subfolder/def要重写为/subfolder/index.php?u=def

我一直围绕着这个圈子,所以任何帮助都将受到大力赞赏。

编辑:忘了提问题! 子文件夹中的请求由根index.php处理,而不是子文件夹。 (/subfolder

的请求除外

当前文件内容

/.htaccess
Options -Indexes -MultiViews +FollowSymLinks

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/admin
RewriteRule ^(.*)$ /index.php?u=$1 [NC,QSA]
/subfolder/.htaccess
RewriteBase /admin/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /admin/index.php?u=$1 [NC,QSA]

2 个答案:

答案 0 :(得分:11)

让你的root .htaccess像这样:

Options -Indexes -MultiViews +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?!admin/)(.+)$ /index.php?u=$1 [NC,QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^admin/(.+)$ /admin/index.php?u=$1 [NC,QSA,L]

对于这个简单的要求,管理文件夹中不需要.htaccess。

答案 1 :(得分:1)

根文件夹的这一行.htaccess:

RewriteRule ^(.*)$ /index.php?u=$1 [NC,QSA]

导致对不存在的文件路径的所有请求被重定向到根文件夹的index.php。那就是问题所在。 一种可能的解决方案可能是用以下几行替换上述行:

RewriteRule ^subfolder/(.*)$ /subfolder/index.php?u=$1 [L,NC,QSA]
RewriteRule ^(.+)$ /index.php?u=$1 [L,NC,QSA]

通过添加L(last)标志并按此顺序编写规则,您将使Apache正确地重定向您的请求,并且无需将指令重写为/subfolder/.htaccess