tp 是把自己当作主站来处理的,如果不想去修改配置文件,那么就要把 tp 项目设置成虚拟主机或把 tp 项目所在目录设置成虚拟目录
如果是 apache 就很简单,把 .htaccess 放在项目目录中就可以了,所以apache配置tp项目基本上不会出现这种问题,只有Nginx会出现访问所有链接却跳转到首页的问题。
修改nginx.conf配置如下
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name xxxxx;
root your path;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
#访问路径的文件不存在则重写URL转交给ThinkPHP处理
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
location ~ \.php {#此处php后面的$符号要去掉
try_files $uri /index.php =404;
fastcgi_pass php-upstream;
fastcgi_index index.php;
#加载Nginx默认"服务器环境变量"配置
include fastcgi.conf;
#设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
set $fastcgi_script_name2 $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
set $fastcgi_script_name2 $1;
set $path_info $2;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fixes timeouts
fastcgi_read_timeout 600;
include fastcgi_params;
location ~ /\.ht {
deny all;
location /.well-known/acme-challenge/ {
root /var/www/letsencrypt/;
log_not_found off;
tp 是把自己当作主站来处理的,如果不想去修改配置文件,那么就要把 tp 项目设置成虚拟主机或把 tp 项目所在目录设置成虚拟目录如果是 apache 就很简单,把 .htaccess 放在项目目录中就可以了,所以apache配置tp项目基本上不会出现这种问题,只有Nginx会出现访问所有链接却跳转到首页的问题。修改nginx.conf配置如下server { listen 80...
index index.htm index.html index.php;
#访问路径的文件不存在则重写URL转交给ThinkPHP处理
if (!-e $request_filename) {
rewrite ^...
server_name api.cloudworkshop.cn;
access_log /app/logs/nginx/api.log;
error_log /app/logs/nginx/api_error.log;
set $root /data/y...
在Nginx低版本中,是不支持PATHINFO的。所以tp6使用路由都是返回首页。ThinkPHP官方给出的解决方案是在nginx.conf下添加以下代码,这个是源码编译下的Lnmp环境,但是在宝塔集成环境中修改不生效,这段代码没有问题,只是在宝塔集成环境中需要修改的地方不是nginx.conf。
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
宝塔下需要进
用tp框架在本地开发了项目时,用的是phpstudy继承环境,起初用的是apache服务器,但是切换到nginx环境时只有主页能访问,其他都会报nginx404的错误 当时也挺纳闷的,经分析得出原因:原网站环境为wamp使用了伪静态,伪静态规则写在网站根目录的.htaccess文件中,Apache下默认识别此文件内容,而Nginx服务器不识别.htaccess文件,导致伪静态规则无效,自然无法解析url地址,导致404错误(文件不存在)
解决方式,首先修改配置文件vhost文件 进行路径重写配置 代码..
对于ThinkPHP的URL访问路径,如:http://域名/index.php/Index/index/index,原先的Nginx的是不支持的pathinfo路径的,导致你在thinkPHP5上面测试的时候,输入相应的URL也不会提示模块名,控制器名或者方法名错误,而是出现一个404找不到的错误,那是因为Nginx无法解析这样的链接
配置 Nginx 使其支持 PHP 应用:
vim /usr/
对于只能访问首页的原因是index.php没有隐藏,默认还是需要加上才能访问其他路径的
把httpd.conf文件的AllowOverride None 全部换成AllowOverride All
然后加载LoadModule rewrite_module modules/mod_rewrite.so去掉前面的#号注释
最后把.htaccess文件放到public的目录里,内容是:
<...
刚刚经过千辛万苦配置好https可以使用了,然而居然还是有问题,只有首页面可以访问,其他页面地址都是404。
正在发愁的时候突然想到以前貌似看过这方面的东西,说是没有做地址跳转吧(具体我也说不准),直接上代码:
try_files $uri $uri/ /index.php?$query_string;
if (!-e $request_filena
1. 安装Nginx并确保它正在运行。您可以使用适用于您的操作系统的包管理器来安装它。
2. 打开Nginx配置文件。通常,它位于/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf。
3. 在http块中添加一个新的server块,以配置您的Node.js项目。
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://localhost:3000; # 这里的端口号取决于您Node.js项目的实际监听端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
在上面的示例中,我们假设您的域名为your_domain.com,并且您的Node.js应用程序在本地监听3000端口。您可以根据您的实际情况进行修改。
4. 保存并关闭配置文件。
5. 重新加载Nginx配置以使更改生效。您可以使用以下命令:
sudo nginx -t # 检查配置文件是否正确
sudo systemctl reload nginx # 重新加载Nginx配置
现在,当访问your_domain.com时,Nginx将代理请求到您的Node.js应用程序。请确保您的Node.js应用程序正在运行,并且监听与Nginx配置中指定的端口相同的端口。