我为一个看似重复的问题道歉,但我看过的几十个问题实际上都没有同样的问题。
我有以下目录结构:
/.htaccess
/index.php
/subfolder/.htaccess
/subfolder/index.php
我希望/index.php
处理所有网页请求,除非请求开始/subfolder
,在这种情况下应由/subfolder/index.php
处理
/abc
要重写为/index.php?u=abc
/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]
答案 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
。