我遇到了一个 mod_rewrite 问题,我的 .htaccess 文件中的第二个规则覆盖了第一个。有问题的 .htaccess 文件如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/appname
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /api/v1/(.*)$ api/v1/index.php?rquest=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
</IfModule>
我看到的问题是这样的:
如果我直接访问http://example.com/path/appname/api/v1/valid/endpoint第一个 RewriteRule 会正确触发,我会从 API 中获取结果。
但是,假设我访问http://example.com/path/appname/app - 一个已根据第二个 RewriteRule 重写的页面。此页面向 api/v1 页面发出 AJAX 请求。相反,这些请求通过第二个 RewriteRule 定向并发送到我的基本 index.php 页面。
我对这可能是怎么回事感到困惑,因为我的理解是 [L] 标志一旦匹配就会阻止任何进一步的规则运行,因此一旦任何包含“api/v1”的请求都应该捕获并停止检查对于任何进一步的比赛。我需要更改什么才能使其正常工作?
谢谢!