PHP上的REST API的mod_rewrite

前端之家收集整理的这篇文章主要介绍了PHP上的REST API的mod_rewrite前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要每次通话
http://localhost/api/

(作为根文件夹)例如http:// localhost / api / get / users实际上是http://localhost/api/index.PHP?handler = get / users.

http:// localhost / api / get / user / 87应该是http://localhost/api/index.PHP?handler = get / user / 87其中在index.PHP中我会捕获$_GET变量处理程序并处理它合适的方式.

如果我有这种重写规则,它只适用于一个

RewriteRule ^([^/\.]+)/?$index.PHP?handler=$1 [QSA,L]

RewriteRule ^([^/\.]+)/?$index.PHP?handler=$1 [QSA,L]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$index.PHP?handler=$1&handler2=$2 [QSA,L]

三个斜线等…

RewriteRule ^([^/\.]+)/?$index.PHP?handler=$1 [QSA,L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$index.PHP?handler=$1&handler2=$2&handler3=$3 [QSA,L]

所以对于第一种情况,http:// localhost / api / a会起作用,但http:// localhost / api / a / b会导致Not Found错误.

编辑:这应该没事吗?

RewriteRule ^(.*)$index.PHP?handler=$1 [L,QSA]
您(自己)的答案应该没问题,请记住它会将所有传入的URL重定向到index.PHP.即如果你有静态文件,例如/js/jquery.js那么它将被改为index.PHP?handler = / js / jquery.js.

如果你想避免问题,请尝试以下方法

RewriteCond %{REQUEST_URI} !(.*)\.(css|js|htc|pdf|jpg|jpeg|gif|png|ico)$[NC]
RewriteRule ^(.*)$index.PHP?handler=$1 [QSA,L]

两个提示

请尝试使用RewriteLog指令:它可以帮助您跟踪此类问题:

# Trace:
# (!) file gets big quickly,remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

猜你在找的PHP相关文章