Как я могу сделать так, чтобы этот php редирект не конфликтовал с Nginx? - PullRequest
0 голосов
/ 30 сентября 2018

Мой php-файл 404.php содержит перенаправление php в верхней части файла:

<?php
    header('Location: some-page.html');

Если я перехожу на www.mysite.com/404, он перенаправляет на www.mysite.com / some-page.html, как и ожидалось, однако, если я захожу на www.mysite.com/non-existent-page, перенаправление не работает.

В моем nginx.conf:

location ~* \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

error_page 404 =200 /404.php;

try_files $uri @remExt;
location @remExt {
    rewrite ^(.*)$ $1.php last;
}
if ($request_uri ~ ^/([^?]*)\.php($|\?)) {
    return 301 /$1$is_args$args;
}
rewrite ^/index$ / permanent;
rewrite ^/(.*)/$ /$1 permanent;

Как я могу заставить перенаправить php работать при посещении www.mysite.com/non-existent-page?

PS

Извините за плохойЗаголовок письменного вопроса.Четкое и лучше написанное название вопроса, которое я хотел использовать, было автоматически отклонено.

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

/404.php

<?php
    http_response_code(301);
    header('Location: /the/page/you/want');

nginx.conf

error_page 404 /404.php
location / {
    try_files $uri $uri.php $uri/ =404;
}

, затем проверьте синтаксис с помощью nginx -t и перезагрузите nginx с помощью systemctl reload nginx (если вы используете systemd)

http://php.net/manual/en/function.http-response-code.php

0 голосов
/ 30 сентября 2018

Кажется, я решил проблему, хотя могут быть некоторые крайние случаи, когда мой код Nginx дает сбой.

Проблема была с этой строкой error_page 404 =200 /404.php;.Решение заключается в использовании try_files внутри location ~* \.php$.

index index.php;

location ~* \.php$ {
    try_files $uri $uri/ /404.php$is_args$args;
    fastcgi_pass unix:/var/run/php-fpm/php-fpm-root.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

location / {
    try_files $uri $uri/ $uri.php$is_args$query_string;
}

if ($request_uri ~ ^/([^?]*)\.php($|\?)) {
    return 301 /$1$is_args$args;
}
rewrite ^/index$ / permanent;
rewrite ^/(.*)/$ /$1 permanent;
0 голосов
/ 30 сентября 2018

Попробуйте это в вашей конфигурации nginx и перезапустите.

error_page 404 /404.php;
location = /404.php {
    root /path/to/www/;
    internal;
}
...