Arhn - архитектура программирования

Перезапись Nginx в подпапке (404)

У меня есть узел сайта на сервере NGINX, который раньше отлично работал, чтобы удалить index.php в конфигурации сайта nginx с помощью try_files.

Но теперь я собираюсь добавить на него блог, где URL-адрес будет www.foo.com/blog, я могу получить доступ к блогу и использовать index.php?p=.

Но как только я использую постоянную ссылку pretty с Nginx Helper, www.foo.com/blog/2013/07/bar, я получаю 404.

server {
  # don't forget to tell on which port this server listens
  listen 80;

  # listen on the www host
  server_name foo.com;

  # and redirect to the non-www host (declared below)
  return 301 $scheme://www.ultra-case.com$request_uri;
}

server {
  # listen 80 default_server deferred; # for Linux
  # listen 80 default_server accept_filter=httpready; # for FreeBSD
  listen 80;

  # The host name to respond to
  server_name www.foo.com;

  # Path for static files
  root /web/foo.com

  #index file
  index index.php;

  #Specify a charset
  charset utf-8;

  # Custom 404 page
  error_page 404 /404.html;

  # Uri Rewrite

  location /blog {
    index index.php;
    try_files $uri $uri/ /blog/index.php?$args;
  }

  location / {
    autoindex on;
    # This is cool because no php is touched for static content.
    # include tihe "?$args" part so non-default permalinks doesn't break when using query string
    try_files $uri $uri/ /index.php?$args;
  }
  location ~ \.php$ {
    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    include fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
  }

  # Include the component config parts for h5bp
  include conf/h5bp.conf;
}

  • root /web/foo.com точка с запятой отсутствует 23.07.2013
  • @MohammadAbuShady хм ... извините за мою ошибку, это просто ошибка, хотя я хочу скрыть свое настоящее имя хоста сервера и расположение файлов. 23.07.2013

Ответы:


1

Принятый ответ направляет все через index.php.
Это приведет к нарушению работы некоторых скриптов, одним из которых является скрипт wp-admin.

Ты можешь использовать:

location /blog/ {
    index index.php;
    try_files $uri $uri/ /blog/index.php?$args;
}
10.06.2014
  • Большое спасибо! Я пробовал все другие решения, и это помогло мне. 21.08.2015
  • Я сжег 5 часов, пытаясь понять это. Спасибо Спасибо спасибо. 19.04.2016
  • Бесконечно благодарен! Это как раз то, что мне было нужно. 20.10.2016
  • Это избавит меня от головной боли!! Спасибо, миллион и голосование вверх! 25.10.2016
  • Спас мой день! Спасибо 16.12.2016
  • Работал со мной после удаления последней косой черты в пути, от /blog/ до /blog может кому-то помочь. Спасибо!! 09.01.2019
  • Ваш ответ заслуживает лучшего ответа года, спасибо 21.02.2019
  • Спасибо, приятель 01.07.2021

  • 2

    Эм... Спасибо за все комментарии и ответы. Но, наконец, я использую этот метод, чтобы заставить его работать

    location /blog {
        index index.php;
        rewrite ^/blog/(.*)+$ /blog/index.php?$1; # it finally works
        # return 200 $request_uri; # it is for inspect what $request_uri is
        # try_files $uri $uri/ /blog/index.php$request_uri$is_args$args; # it gets 500 server error
    }
    

    Пожалуйста, укажите, если текущие настройки имеют какие-либо проблемы. спасибо!

    23.07.2013
  • Я получаю, что эта веб-страница имеет цикл перенаправления. 14.05.2014
  • @Ryan удалите любые другие конфигурации из этого блока server { }, так как он все равно будет их читать после этого, что приведет к бесконечным циклам. Я обошел это, установив location /blog {} для блога и location / {} для основного индекса. 26.08.2015
  • Это не передало переменные должным образом для меня. location /blog/ { try_files $uri $uri/ /blog/index.php?$args; } в итоге работал 17.09.2015
  • Ваш код работает хорошо, за исключением цикла перенаправления /wp-admin/. 15.03.2016

  • 3

    Я бы предложил следующее, чтобы поймать любые постоянные ссылки в подпапке /blog.

    location /blog {
        index index.php;
        try_files $uri $uri/ /blog/index.php?$args;
    }
    
    13.05.2015

    4

    Попробуйте это, я изменил свой ответ, чтобы попытаться имитировать то же поведение, которое вы используете в своем переписывании.

    location ~ /blog(.*) {
        index index.php;
        try_files $uri /blog/index.php?$1&$args;
    }
    
    23.07.2013
  • Спасибо за ваш ответ. Но я следую вашим инструкциям, становится HTTP 500. 23.07.2013
  • @Cauliturtle попробуйте этот другой ответ. 17.11.2013
  • Затем, когда я пытаюсь посетить /blog/post-name, Chrome пытается загрузить страницу в виде файла. 14.05.2014

  • 5

    Попробуй это

    location /api {
        # example: http://demo.com/api/channels/dmzb
        root   /data/webserver/demo.com/api/web;
        rewrite ^/api/(.*) /$1 break;
        try_files $uri $uri/ /api/index.php?$args;
    
        location ~ ^/api/index\.php {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
    
            # fix request_uri
            set $changed_request_uri $request_uri;
            if ($changed_request_uri ~ ^/api(.*)) {
                set $changed_request_uri $1;
            }
            fastcgi_param REQUEST_URI $changed_request_uri;
    
            # fix script_filename
            fastcgi_split_path_info ^(?:\/api\/)(.+\.php)(.*);
            fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
        }
    }
    
    09.12.2015

    6

    Подумайте о php, переписывать не нужно примерно так:

    location /app/ {
      include fastcgi_params;
      fastcgi_param  SCRIPT_FILENAME /path/to/your/app/index.php;
      fastcgi_pass php;
    }
    

    С последующим пропуском fastcgi

    upstream php {
        server unix:/var/run/php5-fpm.sock;
    }
    
    16.10.2015

    7

    Универсальное решение для красивых URL-адресов на уровне корня и одной подпапки:

    set $virtualdir "";
    set $realdir "";
    
    if ($request_uri ~ ^/([^/]*)/.*$ ) {
            set $virtualdir /$1;
    }
    
    if (-d "$document_root$virtualdir") {
            set $realdir "${virtualdir}";
    }
    
    location / {
            try_files $uri $uri/ $realdir/index.php?$args;
    }
    
    12.03.2017

    8

    Я обнаружил, что с включенной постоянной ссылкой мне нужна комбинация обоих наборов ответов, приведенных здесь, иначе

    1. Только с перезаписью ни один из статических файлов не был обслужен.
    2. Только с пробными файлами постоянные ссылки не работали

    Это работает на моей настройке

    location /blog/ {
          rewrite ^/blog/(blog/(tag|category|20??)/.*)+$ /blog/index.php?$1;
          try_files $uri $uri/ /blog/index.php?$args =404;
    }
    
    15.05.2018

    9

    IP-адрес: 123.123.123/xxxxxxxxxx/

    location /xxxxxxxxxx/ {
       try_files $uri $uri/ /xxxxxxxxxx/index.php?$query_string;
    }
    
    # Rewrite multisite '.../wp-.*' and '.../*.php'.
    if (!-e $request_filename) {
        rewrite ^(/xxxxxxxxxx/.*)+(/wp-.*) /xxxxxxxxxx/$2 last;
        rewrite ^(/xxxxxxxxxx/.*)+.*(/wp-admin/.*\.php)$ /xxxxxxxxxx/$2 last;
        rewrite ^(/xxxxxxxxxx/.*)+(/.*\.php)$ /xxxxxxxxxx/$2 last;
    
    }
    
    05.06.2020
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..