Mod rewrite 二次混淆

Mod rewrite 二次混淆,mod-rewrite,apache2,Mod Rewrite,Apache2,我有以下重写设置: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !-f RewriteCond %{REQUEST_URI} !-d RewriteRule ^api/?.*$ api.php [NC,L] RewriteCond %{REQUEST_URI} !-f RewriteCond %{REQUEST_URI} !-d RewriteRule ^.*$ web.php [L] 我想要的是api.php或web

我有以下重写设置:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^api/?.*$ api.php [NC,L]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^.*$ web.php [L]
我想要的是api.php或web.php(它们自己执行路由)捕获非文件和目录,其余的返回文件或目录。然而,mod_rewrite将主路径
'/'
视为
'
并没有被捕获-我猜这是因为/是一个目录-根目录


如何修复此问题,使其通过web.php访问,同时保持目录的可访问性?

语法:重写基本URL路径


URL路径可以是根相对路径或空路径。空URL路径值表示规则库将等于网站根。

首先,您需要将规则中的请求URI更改为请求文件名。看

REQUEST_URI:在中请求的资源 HTTP请求行

请求文件名:完整的本地文件名 文件或脚本的文件系统路径 匹配请求

然后,添加另一条规则:

RewriteCond %{REQUEST_URI} /
RewriteRule .* web.php [L]
因此,最终结果将是:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/?.*$ api.php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)? web.php [NC,L]

RewriteCond %{REQUEST_URI} /
RewriteRule .* web.php [L]