0. 前提假设
微信号:buddha2080
1. 问题描述
PHP项目有多个入口文件,如入口文件:index.php,admin.php,app.php,api.php
常规访问如下:
http://www.domain.com/index.php/xxx/xxx/...
http://www.domain.com/admin.php/xxx/xxx/...
http://www.domain.com/app.php/xxx/xxx/...
http://www.domain.com/api.php/xxx/xxx/...
不想让用户从URL地址中,是用什么语言开发的,则需要隐藏.php,最终如下:
http://www.domain.com/index/xxx/xxx/...
http://www.domain.com/admin/xxx/xxx/...
http://www.domain.com/app/xxx/xxx/...
http://www.domain.com/api/xxx/xxx/...
2. 解决问题的Nginx配置
server {
listen 80;
server_name caorulai.com;
root /data/www;
index index.php index.html index.htm;
#隐藏 .php
location / {
if (!-e $request_filename) {
# admin.php
rewrite ^/admin/(.*)$ /admin.php/$1 last;
# app.php
# rewrite ^/app/(.*)$ /app.php/$1 last;
# api.php
# rewrite ^/api/(.*)$ /api.php/$1 last;
# 前面的url过滤之后,再走index.php入口
rewrite ^/(.*)$ /index.php/$1 last;
}
}
#pathinfo 模式
location ~ \.php($|/) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}