.htaccess htaccess仅显示url的最后一部分和尾部斜杠

.htaccess htaccess仅显示url的最后一部分和尾部斜杠,.htaccess,.htaccess,我们使用以下两行代码 RewriteRule (.+?)/(.+?)\.php http://%{HTTP_HOST}/$2.php [L,R=301] RewriteRule (.+?)/(.+?)\.html http://%{HTTP_HOST}/$2.html? [L,R=301] 这是以 www.site.com/something/page.php www.site.com/something/page.php?a=b www.site.com/something/page.ht

我们使用以下两行代码

RewriteRule (.+?)/(.+?)\.php  http://%{HTTP_HOST}/$2.php [L,R=301]
RewriteRule (.+?)/(.+?)\.html http://%{HTTP_HOST}/$2.html? [L,R=301]
这是以

www.site.com/something/page.php
www.site.com/something/page.php?a=b
www.site.com/something/page.html
作为一个测试,它看起来正在工作,但我在分析中遇到了一些错误,其中一些url显示它被称为/?a=b。我不明白什么时候会出现这种情况

其次,我有像admin/login.php这样的现有文件夹。当我使用上面的代码时,显然这个url被重定向为login.php,这是我不想要的。是否有一种方法可以将此bi传递给3个文件夹管理员、t4、t5。我真的很急,因为我需要纠正索引问题。你能帮忙吗

第二条重写语句也需要类似的调整

您可以使用以下代码:

RewriteEngine On

# skip these 3 folders
RewriteRule ^(admin|t4|t5)(/|$) - [L,NC]

# existing rules
RewriteRule (.+?)/(.+?)\.php /$2.php [L,R=301]

RewriteRule (.+?)/(.+?)\.html /$2.html? [L,R=301]

# redirect /?a=b to /
RewriteCond %{QUERY_STRING} .+
RewriteRule ^$ /? [L,R=301]

非常感谢。我将测试并确认它是否有效。但是您知道url什么时候可以变成/?a=b,例如/a.php?id=123。如果你不明白你所说的
是什么意思,请帮助我,当url可以变成/?a=b时,例如/a.php?id=123。
执行此规则后,我看到我的一个url www.site.com/a.php?b=3变成了www.site.com/?b=3。这是错误的,会创建重复的主页。我不明白这是怎么产生的,但我不会改变你现有的规则。你可以遵守现在的规则。只需将跳过目录的新规则放在当前规则之前。是的,我知道您没有更改任何内容。我想我的代码有问题。事实上,我想知道,如果你能为提到的问题回顾一下,因为我不知道问题是什么。谢谢你的帮助。