Чистые ссылки в nginx

Привет всем!

Такая проблема. Использую nginx как фронт-энд к Апачу для отдачи статики, поэтому приходится под все сайты переписывать правила чистых ссылок. Вордпресс, например, работает безо всяких манипуляций, для Друпала нужны небольшие правки виртуального хоста, а вот c livestreet даже не знаю как подступится. При клике на ссылки блогов и юзеров выскакивает 404.

Насколько я понимаю, надо переписать следующие правила из .htaccess под nginx:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php


и все должно заработать. Но вот как раз с переписыванием у меня и проблема :) Если кто разбирается, плиз хэлп!

20 комментариев

avatar
у меня все вроде и так работало. Хостинг мажордомо у них как раз nginx для статики стоит.
avatar
Тут много зависит от конкретных конфигураций, у меня вордпресс и так работает говорю же :) А вот ливстрит чего-то отказывается
avatar

все просто:
location / {
    root /path/to/your/webroot;
    index index.php;

    if (!-e $request_filename) {
        rewrite ^(.*)$  /index.php;
    }
}
 
avatar
это ессно надо добавить в секцию server {… }.

К слову, Nginx при прикручивании FastCGI к нему и сам скрипты неплохо выполняет:) не пожирая память, как это делает индеец
avatar
Спасибо огромное! Пока что посмотрю как такая конфигурация себя поведет (только недавно на нее перешел), а там уж будем думать, мне лично Апач как-то не очень, но приходится пока что юзать :)
avatar
Странно, у меня такие реврайты не работают и nginx при запросе комментариев из Прямого эфира показывает 404.
avatar
у меня такая же проблема! ты ее случаем не решил?
avatar
В настройках этого хоста nginx сотри html
avatar
А можно поподробней? Для совсем новичков? )
avatar
#Static files location
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|flv|mp3)$ {
root /var/www/example.com; }
avatar
когда это сделал, сайт перестал выводит какие либо картинки, выводится чисто текст?? в чем может быть проблема?
avatar
Помогло, большое спасибо!
avatar
Не надо делать так

if (!-e $request_filename) {
rewrite ^(.*)$ /index.php;
}

Надо делать так

location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
avatar
я не силён в настройках, но если энжинкс стоит как фронтэнд и проксирует всё кроме статики на бэкэнд, то проблем вообще не должно быть. Ведь после проксирования запрос попадает на сервер Апача и тот без проблем обрабатывает текущий .htaccess
  • ort
  • 0
avatar
Я тоже так думал, однако буквально некоторые исключения есть, тут наверное от конкретного сервера все зависит, хз, у меня на livestreet например переписываются все чистые ссылки, кроме тех, что .html, хоть ты тресни :) вот сейчас решаю вопрос
avatar
нгинкс проксирует не все, а по регуляркам и локейшенам. все что не попадает под локейшн, отдает нгинкс. в этом и проблема
avatar
упс, не посмотрел дату :(
avatar
Короче, проблема была в том (если кто нибудь использует nginx, будет полезно), что в правилах прокси были выставлены в том числе хтмл файлы, поэтому все на ливстрите с расширением .html отдавалось нгинксом, а не апачем!
avatar
ну дак он для этого и служит и проксирует всё кроме статики на бэкэнд…хтмл статика
avatar
Сегодня как раз разбирался с nginx, возможно кому то это будет полезно, мой конфиг (рабочий!)


    server {
                listen host.ru:80;
                server_name host.ru www.host.ru;

        location / {
                root /home/www/host.ru/html-data;
                index index.php;
            if (!-e $request_filename) {
                rewrite ^(.*)$  /index.php;
                    }
                error_page          404 = @site;
                error_page          400 = @site;
                }

        location @site {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_store          on;
        proxy_store_access   user:rw  group:rw  all:r;
        proxy_temp_path      /var/cache/nginx/poxytmp 1 2;
        client_max_body_size 40m;
        client_body_buffer_size 256k;

        proxy_connect_timeout 120;
        proxy_send_timeout    120;
        proxy_read_timeout    120;
        proxy_send_lowat      12000;

        proxy_buffer_size  16k;
        proxy_buffers      32   16k;
        proxy_set_header ORIG_URI $request_uri;


                }


        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:1026;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/www/host.ru/html-data$fastcg$
            include        fastcgi_params;
                }

        }



тпштч настроен фронтендом для апача
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.