Regex RewriteRule正则表达式问题-如何修复`/api`return index.php?url=api

Regex RewriteRule正则表达式问题-如何修复`/api`return index.php?url=api,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,当前的重写规则在/api上失败(必须返回index.php?url=api) 有效期: /api返回index.php?api&url=[空] /api/user return index.php?api&url=user 失败: /api返回index.php?api&url=s,但必须返回index.php?url=api 更新:如果/api之后的任何字符不以斜杠开头,则必须返回index.php?url=[任何字符]-/apirf8ty76必须返回index.php?url=api

当前的
重写规则在
/api
上失败(必须返回index.php?url=api)

有效期:

  • /api返回index.php?api&url=
    [空]
  • /api/user return index.php?api&url=user
失败:

  • /api返回index.php?api&url=s,但必须返回index.php?url=api
更新:如果
/api
之后的任何字符不以斜杠开头,则必须返回index.php?url=
[任何字符]
-/apirf8ty76必须返回index.php?url=apirf8ty76


/api仍然必须返回index.php?api&url=
[empty]
和/api/user return index.php?api&url=user

在第一个正则表达式中使用负前瞻,如下所示:

RewriteRule ^api(?!s)\/?([^\/]*)$ index.php?api&url=$1

这应该可以满足您的要求。

将您的条件更改为此,以使其正常工作:

RewriteRule ^api(?:/([^/]*))?$ index.php?api&url=$1 [QSA,L,NC]

RewriteRule ^([^.]*)$ index.php?url=$1 [QSA,L]

对不起,我的问题不够清楚,我只是更新了一下。您的正则表达式在
/api
中工作正常,但在
/api
下一个字符将是除斜杠
/
以外的其他字符时,将无法解决此问题。
RewriteRule ^api(?:/([^/]*))?$ index.php?api&url=$1 [QSA,L,NC]

RewriteRule ^([^.]*)$ index.php?url=$1 [QSA,L]