首页 > 开发 > php > 正文

使用Nginx搭建Typecho静态资源全部302跳转到404页面

2017-09-06 13:40:29  来源:网友分享

使用该方法失败https://segmentfault.com/q/10...

不光静态资源302跳转,而且跳转到的404.html还无法加载,还有就是url后面的php去不掉,求大神解决!!!

nginx具体配置如下

80端口

server {        listen  80;        server_name crazyc.cn www.crazyc.cn;        root /var/www/html/;        #rewrite ^/(.*)$ https://crazyc.cn/index.php permanent;        if ($ssl_protocol = "") {            return 301 https://$server_name$request_uri;        }        if ($host != 'crazyc.cn' ) {            return 301 https://crazyc.cn$request_uri;        }        error_log /logs/error.log;        charset     utf-8;        client_body_buffer_size                         512k;        proxy_connect_timeout                           90;        proxy_send_timeout                              90;        proxy_read_timeout                              4000;        proxy_buffers                                   32 4k;        client_max_body_size 75m;        # Load configuration files for the default server block.        location / {            index index.html index.php;            if (!-e $request_filename) {                rewrite ^(.*)$ /index.php$1 last;            }        }    }    include vhost/*;

vhost/下的443端口

server {    listen       443 ssl;    server_name crazyc.cn www.crazyc.cn;    ssl on;    ssl_certificate /root/.acme.sh/crazyc.cn/fullchain.cer;    ssl_certificate_key /root/.acme.sh/crazyc.cn/crazyc.cn.key;    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;    ssl_ciphers  HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;    error_log /logs/error.log;    error_page 404 = https://crazyc.cn/404.html;    charset     utf-8;    client_max_body_size 75m;        # Load configuration files for the default server block.        location ~ .*\.php(\/.*)*$ {            root html;            fastcgi_index index.php;            fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;            include fastcgi_params;            fastcgi_pass  127.0.0.1:9000;            #include fastcgi.conf;            #fastcgi_pass  127.0.0.1:9000;        }        access_log logs/yourdomain.log combined;}

解决方案

你的80端口里面配的东西太多了,80里面只需要配一样,就是所有请求跳到443.然后具体修改443的配置。
443里面你只指定了php的访问,没有指定静态资源的路径。参考配置如下:

server {    listen 80;    server_name crazyc.cn www.crazyc.cn;    rewrite ^ https://$server_name$request_uri permanent;}server {    listen 443 ssl;    server_name crazyc.cn www.crazyc.cn;    index index.php;    charset utf-8;        ssl on;    ssl_certificate /root/.acme.sh/crazyc.cn/fullchain.cer;    ssl_certificate_key /root/.acme.sh/crazyc.cn/crazyc.cn.key;    ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";    ssl_session_cache shared:SSL:10m;    ssl_session_timeout 10m;        # 静态资源    location ~* .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|apk|ttf|woff|woff2|svg|flv|swf)$ {        add_header Access-Control-Allow-Origin *;        root /example/path/; # 这里配你的静态资源文件根路径    }        # 以下是php配置    location / {        fastcgi_pass  127.0.0.1:9000;        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        include       fastcgi_params;        try_files     $uri $uri/ /index.php?$args;    }

如果你的静态资源与php文件放在一起,静态资源里面的root可以放到外边来,像这样:

server {    listen 80;    server_name crazyc.cn www.crazyc.cn;    rewrite ^ https://$server_name$request_uri permanent;}server {    listen 443 ssl;    server_name crazyc.cn www.crazyc.cn;    root /example/path/; # 这里配你的静态资源文件根路径    index index.php;    charset utf-8;        ssl on;    ssl_certificate /root/.acme.sh/crazyc.cn/fullchain.cer;    ssl_certificate_key /root/.acme.sh/crazyc.cn/crazyc.cn.key;    ssl_ciphers "CHACHA20:GCM:HIGH:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS";    ssl_session_cache shared:SSL:10m;    ssl_session_timeout 10m;        # 静态资源    location ~* .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css|apk|ttf|woff|woff2|svg|flv|swf)$ {        add_header Access-Control-Allow-Origin *;    }        # 以下是php配置    location / {        fastcgi_pass  127.0.0.1:9000;        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        include       fastcgi_params;        try_files     $uri $uri/ /index.php?$args;    }}