Thinkphp项目由apache转到nginx后的入口index.php问题

thinkphp项目中index.php的入口文件的隐藏问题

  • 发现问题的起因,还是从centos系统迁移项目的过程中,由原有的apache服务迁移成nginx的过程中,发现访问80端口的项目过程中,具体的项目路由访问必须要增加index.php的入口文件(因为80端口,我们放置了一部分项目,然后没有单独配置),这时候就需要在nginx的配置文件中处理一下了

  • 究其原因还是因为请求的问题,我们项目的nginx会默认将80端口转发 /var/www/html,而我访问的项目是 /var/www/html的下级目录中众多项目中某一个,所以存在的问题,因为根目录下还有个index.php,是为了确定项目是否通畅的文件。

效果展示

未隐藏index.php
serverName/index.php/模块/控制器/操作

隐藏之后
serverName/模块/控制器/操作

废话不多说,附上nginx的配置文件,附带两个项目的隐藏入口index.php配置

server
{
    listen  80;
    server_name xxxx;
    root    /var/www/html;
    index   index.php index.html index.htm;

    error_log logs/all.error.log;
    access_log logs/all.access.log;

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

    location ~ \.php {
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;

        set $real_script_name $fastcgi_script_name;
        if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
            set $real_script_name $1;
            set $path_info $2;
        }
        fastcgi_connect_timeout 1200;
        fastcgi_send_timeout 1200;
        fastcgi_read_timeout 1200;
        fastcgi_param SCRIPT_FILENAME $document_root/$real_script_name;
        fastcgi_param SCRIPT_NAME $real_script_name;
        fastcgi_param PATH_INFO $path_info;
    }
}

处理完成,顺便提一下apache的隐藏index.php入口文件的配置

apache走的是重写规则,需要在httpd.conf中进行配置

  • 检测Apache是否支持mod_rewrite(具体看httpd.conf的配置,找不到mod_rewrite的可以先测试)

  • 如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/usr/local/apache/conf/” 下的 httpd.conf 文件, 查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。 如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module ,modules/mod_rewrite.so”(必选独占一行)

  • 在httpd.conf里找到AllowOverride None 将None改为 All (PS:所有的AllowOverride对应的None都改为ALL)

# 重写配置
<Directory />
#   AllowOverride none  todo
    AllowOverride All
    Require all denied
</Directory>
  • 把下面的内容保存为.htaccess文件放到项目入口文件的同级目录下(也就是项目根目录中)
# .htaccess配置文件内容
<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

或者 

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>


  • 以上nginx和apache修改完配置,重启即可生效

apache中支持php7的加载配置

# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
# Cannot load both php5 and php7 modules
<IfModule !mod_php5.c>
  <IfModule prefork.c>
    LoadModule php7_module modules/libphp73.so
  </IfModule>
</IfModule>

胡梦旭博客
请先登录后发表评论
  • latest comments
  • 总共0条评论