2013-11-29 3 views
0

Я пытаюсь получить пользовательскую страницу 404 для отображения на определенном сервере. Страница ошибок 404 находится по адресу /www/example/html/404.php, а корень сайта -/www/example/html/Nginx custom error_page не использует указанную страницу?

В настоящее время любая несуществующая страница дает этот результат http://i.imgur.com/NUvZ9uG.png и не кажется загрузите мою страницу 404 (которая имеет некоторые пользовательские стили и меню). Я боролся с этим в течение нескольких дней с разными настройками .conf, мой текущий nginx.conf ниже. Я на Ubuntu 12, Nginx 1.1.19 и использую php-fpm.

user  www-data; 
worker_processes 5; 
error_log logs/error.log; 
worker_rlimit_nofile 8192; 

events { 
    worker_connections 4096; 
} 

http { 
    include mime.types; 
    include fastcgi_params; 
    index index.php index.html index.htm; 

    default_type application/octet-stream; 
    log_format main '$remote_addr - $remote_user [$time_local] $status ' 
    '"$request" $body_bytes_sent "$http_referer" ' 
    '"$http_user_agent" "$http_x_forwarded_for"'; 
    access_log logs/access.log main; 
    sendfile  on; 
    tcp_nopush on; 
    server_names_hash_bucket_size 128; 

    server { 
      listen 80; 

      server_name example.com; 
      client_max_body_size 20M; 
      root /www/example/html; 

      access_log logs/example.access.log; 

      location/{ 
        index index.php index.html index.htm; 
        try_files $uri $uri/ @rewrite; 
      } 

      location @rewrite { 
        rewrite ^/(.*)$ /index.php?q=$1; 
      } 

      location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { 
        access_log off; 
        expires max; 
      } 

      location /404.php { 
        internal; 
      } 

      location ~ \.php$ { 
        include fastcgi_params; 
        fastcgi_intercept_errors on; 
        error_page 404 /404.php; 
        fastcgi_pass 127.0.0.1:9000; 
      } 

      location ~ /\.ht { 
        deny all; 
      } 
    } 

ответ

1

Я думаю, что вы должны сделать следующее:

error_page 404 /www/example/html/404.php; 

location /404.php { 
    return 404; 
} 

Что ваш доступ и ошибки журналы показывают?

Второй вариант. Определение пользовательских 404 страницы для всего вашего "сервера" контекст:

server { 
... 

error_page 404 /www/example/html/404.php; 

... 
} 
+0

Последнего журнал доступ HTTP: //pastebin.com/CqjHWKvb - до сих пор не загружалась правильная страница ошибки. Я поместил код «error_page» в блок «PHP», если бы он был в блоке «/» вместо этого? –

+0

Если все, что вам нужно сделать, это, чтобы показать конкретную пользовательскую страницу на 404, выполните следующие действия: сервер { ... error_page 404 = /www/example/html/404.php; ... } Устранение неполадок в вите, пожалуйста, прокомментируйте каждый блок «местоположение». Затем попробуйте получить доступ к несуществующему ресурсу. Вы должны увидеть страницу пользовательской ошибки. BTW, убедитесь, что у демона nginx есть соответствующие разрешения в файле «404.php». – alfredocambera

0

Вы пробовали в location ~ \.php$ блоке для использования:

error_page 404 = /404.php; 

Или

location ~ \.php$ { 
    error_page 404 @fallback; 
} 

location @fallback { 
    proxy_pass http://example.com/html/404.php 
} 
+0

Прокси-сервер с ошибкой «proxy_pass» может не иметь части URI в местоположении, заданном регулярным выражением, или внутри именованного местоположения, или внутри оператора «if», или внутри блока «limit_except» в /etc/nginx/nginx.conf: 181" –

Смежные вопросы