You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Apache Mod Rewrite及Nginx配置实现PHP REST API的优雅URL路由

实现Apache和Nginx的URL重写适配你的PHP REST API

完全可以实现你要的效果!不管是Apache还是Nginx,都能通过简单配置让你的动态URL直接被PHP解析,不用手动在URL里加index.php。下面分两种服务器给你具体配置方案:

Apache 配置步骤

首先得确保你的Apache已经启用了mod_rewrite模块(大部分VPS默认已经开启,如果没开的话,Ubuntu/Debian可以用sudo a2enmod rewrite,CentOS可以编辑httpd.conf开启)。

然后在你的api目录下创建一个.htaccess文件,写入以下规则:

RewriteEngine On

# 如果请求的不是真实文件或目录,就执行重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

规则说明:

  • RewriteEngine On:开启URL重写功能
  • 两个RewriteCond:判断当前请求的路径是不是真实存在的文件(!-f)或目录(!-d),只有当都不是的时候才执行重写
  • RewriteRule ^(.*)$ index.php/$1 [L]:把请求的路径(比如user/create)追加到index.php后面,[L]表示这是最后一条规则,停止后续匹配

另外要注意:你的Apache站点配置里,对应/api目录的AllowOverride要设置为All,不然.htaccess的规则不会生效。比如在虚拟主机配置里加:

<Directory /var/www/html/api>
    AllowOverride All
</Directory>

关于URL参数:不用担心,Apache会自动保留原请求的查询参数(比如?user=test),不需要额外配置,重写后的请求会自动带上这些参数。

Nginx 配置步骤

Nginx的配置更直接,不需要.htaccess,直接在你的站点配置的server块里添加以下location规则:

location /api/ {
    # 先尝试访问真实文件/目录,不存在就转发到index.php
    try_files $uri $uri/ /api/index.php$request_uri;
}

# 确保PHP解析配置正确(如果你的Nginx已经有PHP处理规则,这部分可以调整适配)
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 这里根据你的PHP版本和fpm路径调整
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    # 关键:确保PHP能拿到完整的请求URI
    fastcgi_param REQUEST_URI $request_uri;
}

规则说明:

  • try_files $uri $uri/ /api/index.php$request_uri:先检查请求的路径是不是真实文件/目录,不是的话就把整个请求URI(包括路径和参数)转发到/api/index.php
  • 后面的PHP处理块里,fastcgi_param REQUEST_URI $request_uri是关键,确保你的PHP代码能通过$_SERVER['REQUEST_URI']拿到正确的请求路径,和你本地开发时的逻辑一致

同样,参数会自动保留,比如访问beautifulrest.com/api/user/create?user=test会被正确转发到/api/index.php/user/create?user=test,你的PHP解析逻辑完全不用改。

内容的提问来源于stack exchange,提问作者Rom7x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:48:11