.htaccess具有嵌套文件的RewriteRules

时间:2014-08-06 12:18:29

标签: php apache .htaccess mod-rewrite

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

网址使用

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

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

有人可以帮忙告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:1)

由于您的第一条规则中的此正则表达式导致mod_rewrite循环:^api/task/([^/]+)/?$也匹配/api/task/skills.php/api/task/index.php

试试这个:

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]