Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Nginx rewrite без редиректа решено. Теперь новая проблема..
цитата
20/05/16 в 19:17
 Nikso
подскажите пожалуйста как без редиректа делать, ну чтобы как в апаче работало
RewriteRule ^some.html$ someother.html [L]

пробую на нгинксе так
rewrite ^/some\.html$ /someother.html permanent;

получаю в браузере 301 редирект на someother.html

так тоже редиректит
location /some.html {
alias /someother.html;
}

Последний раз редактировалось: Nikso (22/05/16 в 12:07), всего редактировалось 1 раз
цитата
20/05/16 в 19:53
 Stek
У меня вот так сделано:

Код:

    location /JsonRpcServer {
        rewrite /JsonRpcServer/(.*) /JsonRpcServer/index.php?controller=$1 last;
    }


Т.е. вызывая /JsonRpcServer/payment , на сервере выполняется /JsonRpcServer/index.php?controller=payment . Никаких 301 не происходит.

Тебе как понимаю малину портит "permanent"
цитата
20/05/16 в 20:32
 Diablo
а ты куда это прописываешь?

rewrite ^some.html/$ /someother.html last;

это пихнуть в include/rewrites.conf файл, который прописан в конфиге vhosts.d/domain.conf:
чет типа:
include include/rewrites.conf;
цитата
21/05/16 в 08:51
 Nikso
сюда прописываю
/usr/local/etc/nginx/extra/domain.com.conf

после правки делаю рестарт service nginx restart

а вот разобрался. в синтаксисе ошибся

Так прописал и заработало
location /test {
rewrite /test.html /test2.html last;
}

ps. чего только не придумают

всем отсыпал спасибы )
цитата
21/05/16 в 12:07
 Nikso
Подкажите еще друзья, а как мне с query строки часть выдрать

if ($query_string ~ ^some=(.*)$) {rewrite /test.html /test.php?thatneed=%1 last;}

$1 тоже не робит.

всю строку $query_string тоже не вариант пихать, там дальше негде будет ее разбирать и отрезать "some="
цитата
22/05/16 в 12:06
 Nikso
разобрался как разобрать query.
может кому пригодится
Код:

location /tt {
if ($query_string ~ ^shit=(.*)$) {
    set $param $1;
    rewrite /tt.html /test.php?s=$param last;}

  rewrite /tt.html /test.php last;
    }


теперь другой затык. Курю мануал, и не могу найти проблему
http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html

суть: Вот так все работает прекрасно.
location /tt {
rewrite /tt.html /test.php last;
}
в браузере domain.com/tt.html - выдает результат работы test.php (там простое echo "hello word")

НО!! если я захотел сделать вместо tt.html tt.php
все сразу ломается..
location /tt {
rewrite /tt.php /test.php last;
}

заголовок HTTP/1.1 404 Not Found
документ File not found.

это что за фигня то такая... просто написал php вместо html
цитата
24/05/16 в 18:39
 Nikso
парни, хелп!
цитата
24/05/16 в 19:43
 localhost
у меня так работает:

Код:

if ($request_uri ~* "/blog/.+$") {
rewrite /blog/(.+)$ /$1 permanent;
break;
}


или так
Код:

location ~ ^/blogposts/page/(\d+)/?$ {
rewrite ^ /index.php$args last;
break;
}
цитата
24/05/16 в 21:57
 Stek
Посмотри в логе для начала, куда обращается и что не находит.

У nginx весьма замороченная система по управлению alias location rewrite. Есть приоритеты по выборке правил.
Я для себя просто пересобирал nginx с включенным debug ключом и включал его в логах. Тогда там полный отчет будет, что в каком порядке запрашивается, на что перезаписывается и что где ищется.

Т.е. может у тебя где выше в конфиге уже прошла обработка php и до твоего реврайта не доходит, так как это правило приоритетом ниже.


Эта страница в полной версии