.htaccess具有嵌套文件的重写规则


.htaccess RewriteRules with nested files

htaccess

RewriteEngine On
Options +FollowSymLinks
RewriteBase /
RewriteRule ^api/task/([^/]+)/?$ api/task/index.php?id=$1 [L,QSA]
RewriteRule ^api/task/skills/([^/]+)?$ api/task/skills.php?id=$1 [L,QSA]

文件夹结构

/api/task/index.php
/api/task/skills.php

Url使用

/api/task/1
/api/task/skills/1

当我尝试访问/api/task/skills/1时,它最终会触发index.php的内容,而不是skills.php

有人能帮我看看哪里出了问题吗?

这是因为第一条规则中的正则表达式^api/task/([^/]+)/?$也与/api/task/skills.php/api/task/index.php 匹配,导致mod_rewrite循环

试试这个:

RewriteEngine On
Options +FollowSymLinks
RewriteBase /
# skip further rules for real files/directories
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^api/task/([^/]+)/?$ api/task/index.php?id=$1 [L,QSA]
RewriteRule ^api/task/skills/([^/]+)?$ api/task/skills.php?id=$1 [L,QSA]