Nginx: Как переписать все URL-адреса, кроме изображений? - PullRequest
2 голосов
/ 12 сентября 2011

Я новичок в nginx и хочу перенести свой сайт с Apache на nginx. Мой сайт имеет URL-адреса, такие как:

www.mywebsite.com / категория / продукт / воздушный шар
www.mywebsite.com/category/product/shoe
www.mywebsite.com/information/help
и т.д.

Поскольку я использую PHP, мне нужно переписать все URL-адреса в index.php, за исключением случаев, когда это изображение, ИЛИ если это «поддельный запрос». Мой nginx.config пока что:

    #block fake requests
    location ~* \.(aspx|jsp|cgi)$ {
        return 410;
    }

    #rewrite all requests if it's not a image
    location / {
        root   html; 
        index  index.php 500.html;

        if (!-f $request_filename) {
            rewrite  ^(.*)$  /index.php?q=$1  last;
            break;
        }
    }

    error_page  404 /index.php;

    # serve static files directly
    location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
        access_log        off;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }               

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  E:/test2/html/$fastcgi_script_name;
        include        fastcgi_params;
    }

Эта конфигурация не работает, потому что:
1. Он не блокирует ложный запрос к файлам .php, и я не могу добавить .php в (aspx | jsp | cgi) $
2. Он не перезаписывает URL-адрес, если файл существует, что является неправильным: он должен обслуживать статические файлы напрямую
, если это определенный тип файла в (jpg | jpeg | gif | css | png | js | ico ) $

Как я могу решить эти проблемы? Я действительно ценю каждый ответ, разъяснение или обратную связь, которую вы можете дать мне.

Спасибо Mike

1 Ответ

1 голос
/ 03 марта 2012

Вам необходимо настроить HttpRewriteModule.Этот модуль позволяет изменять URI с помощью регулярных выражений (PCRE), а также перенаправлять и выбирать конфигурацию в зависимости от переменных.

Если директивы этого модуля даны на уровне сервера, то они выполняются доместоположение запроса определяется.Если в этом выбранном месте есть дополнительные директивы перезаписи, они также выполняются.Если URI изменился в результате выполнения директив внутри местоположения, тогда местоположение снова определяется для нового URI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...