这是我的.htaccess:
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ([^/]+/.*) index.php?dir=%{REQUEST_URI}
htaccess存在于test.com/main/.htaccess
中
我可以访问test.com/main/和test.com/index.php罚款
test.com/main/directory被重写为test.com/main/index.php?dir=/main/directory/但是test.com/main/directory保留在url栏中。这很好。
问题是当我尝试访问子子目录时。当我访问test.com/main/foler1/folder2时,它会被重写为index.php?dir = / main / folder1 / folder2 /。这也很好,但是test.com/main/folder1/folder2/?dir=/main/folder1/folder2/显示在地址栏中,而不是在网址栏中保留test.com/main/folder1/folder2。这就是问题。
我希望所有子目录,而不仅仅是main的直接子目录,在重写时将目录保留在url栏中。直接的孩子这样做很好,但是在我的get变量显示的方式下重写的任何目录。
这次重写的目的是让我不必将index.php文件复制到每个新创建的文件夹中,因此将.htaccess复制到每个文件夹都会失败。
答案 0 :(得分:0)
你可能想要RewriteRule ([^/]+/.*) index.php?dir=%{REQUEST_URI} [QSA,L]
(如果规则成功,L会阻止mod重写处理任何进一步的规则)QSA会附加任何可能已经传入的查询字符串。
更新
问题是服务器正在重写没有斜杠(可见)的URL作为带有斜杠的URL,并将重写规则作为其中的一部分。解决方法是仅在URL以斜杠结束时处理规则,例如:
RewriteRule ([^/]+/.*/$) index.php?dir=%{REQUEST_URI} [QSA,L]
这样它将在两个单独的步骤中进行重写:
而不是:
答案 1 :(得分:0)
我将添加我在测试mootinator解决方案时找到的解决方案。
而不是链接到 test.com/main/foler1/folder2
链接到
test.com/main/foler1/folder2/(包括斜杠!)
重定向将成功重定向到
index.php?dir = / main / folder1 / folder2 /
而
test.com/main/foler1/folder2/
留在网址栏。
这是一个有些狡猾的解决方案,但它应该可以正常工作。