phpStudy+ThinkPHP配置的nginx环境出现404错误

本文解决了一个关于ThinkPHP5.08框架在nginx环境下无法访问虚拟目录对应模块的问题。通过添加两行配置代码实现了路径重写功能,确保了在请求文件不存在时能正确跳转至框架入口文件。

环境配置:框架是ThinkPHP5.08,环境是用phpStudy选的nginx环境;

问题现象:访问配置的虚拟目录时,可以访问到框架的入口文件,但无法访问到虚拟目录对应的模块(启用了项目分组)。

问题出现原因:集成环境自动生成的vhost.conf文件中缺少两行配置语句句

if (!-e $request_filename) {
    rewrite ^/(.*)$ /index.php/$1 last;
}

这两句话的意思是指,如果请求的文件不存在,则进行路径的重写;

改完以后的vhost.conf文件内容为:


server {
        listen       80;
        # 网站域名
        server_name  local.taihaowan.cn taihaowan.cn;
        # 代码根目录
        root   "E:/code/ths";
        location / {
        # 默认请求的文件排序
            index  index.html index.htm index.php;
            # 判断请求的文件是否存在
            if (!-e $request_filename) {
                # 如果不存在就进行重定向
                rewrite ^/(.*)$ /index.php/$1 last; 
            }

        }

        location ~ \.php(.*)$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
}

### 如何在PHPStudy中设置和配置Nginx服务器 #### 配置URL重写美化路径省略`index.php` 为了使URL更加简洁美观,在PHPStudy中的Nginx可以按照如下方式来配置以去除访问链接里的`index.php`部分。编辑站点对应的`.conf`文件,通常位于phpStudy安装目录下的`PHPTutorial/nginx/conf/vhost/`内[^1]。 ```nginx server { listen 80; server_name localhost; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ``` 此段配置实现了当请求不存在实际物理文件或目录时自动转向至`index.php`处理,并保留原始查询字符串参数。 #### 解决跨域资源共享(CORS) 对于需要支持来自不同源的HTTP请求的应用程序来说,可以在Nginx配置里加入特定头部信息允许跨域资源加载。同样是在对应网站配置文件中添加以下内容实现跨域权限开放[^2]: ```nginx location / { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; if ($request_method = 'OPTIONS') { return 204; } } ``` 这段代码设置了响应头字段,告知浏览器哪些域名、方法以及自定义头部被授权用于发起CORS预检请求。 #### ThinkPHP框架适配 如果使用的是ThinkPHP5这样的MVC架构,则需要注意调整根目录指向项目的`public`子文件夹而不是默认的顶级目录。修改`root`指令并确保路径分隔符统一采用正斜杠形式而非反斜杠,这是因为Nginx无法识别Windows风格的路径符号[^3]。 ```nginx server { ... root "E:/www/project/public"; # 注意这里要改成自己的项目位置,并且用/ location / { try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/(.*)$ /index.php/$1 last; } location ~ \.php(/|$) { set $real_script_name $fastcgi_path_info; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; } } ``` 上述配置适用于大多数基于ThinkPHP或其他类似结构的应用部署需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值