Php .htaccess将我们的完整URL重写URL吐到文件夹名称上

Php .htaccess将我们的完整URL重写URL吐到文件夹名称上,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我有以下访问权限: RewriteEngine On RewriteBase /sandbox/ RewriteRule ^(assets)($|/) - [L] RewriteRule ^(.*)$ lib/script/bootstrap.php?route=$1.php [NC,L,QSA] 我正在做的是将所有请求(除了我的资产-img、css、js)重定向到我的引导脚本,该脚本将通过路由参数处理请求,该参数包括URL请求 这在大多数情况下都可以正常工作,但我接到以下电话时除外: ,

我有以下访问权限:

RewriteEngine On
RewriteBase /sandbox/

RewriteRule ^(assets)($|/) - [L]

RewriteRule ^(.*)$ lib/script/bootstrap.php?route=$1.php [NC,L,QSA]
我正在做的是将所有请求(除了我的资产-img、css、js)重定向到我的引导脚本,该脚本将通过路由参数处理请求,该参数包括URL请求

这在大多数情况下都可以正常工作,但我接到以下电话时除外:

,其中admin是存在于我的目录中的文件夹,以及其他文件夹。此文件夹包含可访问的各种页面,以及一个index.php文件,默认情况下,my bootstrap.php路由将请求从上述URL重定向到该文件夹

我的问题是,当我尝试点击页面:,我的htaccess(据我所知)正在重写可见的URL到,这不是很漂亮。我相信这是因为上面的URL是指向我的/admin/文件夹的有效URL这一事实存在一些冲突,但我希望我的.htaccess忽略这一点,并将其发送到我的bootstrap.php(my.htaccess的第4行)。我做错了什么

以下是我的浏览器中的请求:

更新:


奇怪的是,它可以正常工作,但不能(注意后面的斜线)。

如果你有真实的文件夹,你需要使用一个条件来忽略真实的文件和文件夹。所有其他请求都将路由到引导文件。(如果我正确理解您的问题。)


看起来您的规则不应该导致这种情况,但您的浏览器可能正在缓存以前的尝试。在私人/匿名窗口或其他浏览器中尝试。你也有同样的行为吗?如果没有
[R]
或其他域,我看不出您的规则将如何导致完全的浏览器重定向;还尝试重新启动我的服务器。因此,在我的浏览器中重写的URL只能由重定向引起?是的-如果您观看浏览器的网络控制台,您应该首先看到它请求
/sandbox/admin
,然后使用301或302重定向到
/sandbox/admin/route=admin.php
。你在.htaccess中还有什么其他内容吗?或者是你发布的所有内容吗?这就是我的.htaccess。我将添加我在控制台中看到的内容,我相信我看到的正是您所描述的内容。
RewriteCond
肯定是需要的,但这仍然不能解释为什么它被重定向而不是错误地发送到重写循环中。我可以看到这通常是如何工作的,但我有以下文件:/admin/index.php,您的.htaccess代码似乎在不跳入我的bootstrap.php的情况下获取了它(我的引导程序中有一个kill,看看它是否通过了那里,但是它从index.php文件中抛出了大量未加载的.php函数,这意味着我的引导程序还没有加载。@Prusprus所以你需要
admin/index.php
通过引导程序文件进行路由?所以我需要/admin和/admin/index路由-/admin由我的引导程序处理,默认情况下指向/admin/index.php。但是,/admin/工作100%正常-它只是/admin(请参阅问题更新以获取完整URL示例)
RewriteEngine On
RewriteBase /sandbox/

RewriteRule ^(assets)($|/) - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ lib/script/bootstrap.php?route=$1.php [NC,L,QSA]