Re: Нужно убрать слэш в конце URL

Sergey Shepelev temotor на gmail.com
Пт Дек 3 15:11:00 MSK 2010


2010/12/3 Vladislav V. Prodan <universite at ukr.net>:
> 03.12.2010 13:20, Sergey Shepelev пишет:
>> 2010/12/3 Vladislav V. Prodan <universite at ukr.net>:
>>> 02.12.2010 23:15, Sergey Shepelev пишет:
>>>>> как реализовать средствами nginx?
>>>>>>
>>>> location ~ (.+)/$ {
>>>>   rewrite ^ $1 permanent;
>>>> }
>>>>
>>>> Обратите внимание, что здесь вернётся 301 редирект. Дублирующийся
>>>> контент на разных урлах поисковики как раз не любят.
>>>>
>>>
>>> [emerg]: pattern "^" has less captures than referrenced in substitution
>>> "$1" in /etc/nginx/conf/vhosts/site.conf:28
>>>
>>> # nginx -V
>>> nginx version: nginx/0.7.65
>>
>> Попробуйте так
>>
>> location ~ (.+)/$ {
>>   set $uri_no_slash $1;
>>   rewrite ^ $uri_no_slash permanent;
>> }
>>
>> Если не получится, то так
>>
>> location ~ /$ {
>>   rewrite (.+)/$ $1 permanent;
>> }
>>
>> Полагаю, что второй вариант даже предпочтительнее.
>
> Наверное, я где-то и что-то не допонял.
>
> Нужно корректно обрабатывать http://site.com/bla-bla-bla
> и делать редирект 301
> http://site.com/bla-bla-bla/ --> http://site.com/bla-bla-bla
>
> Все предыдущие конструкции делали это, но при http://site.com получался
> бесконечный цикл, ибо браузер/вебсервер делал перенаправление на
> http://site.com/, а конструкция опять перенаправляла на http://site.com
>

Вы правильно поняли, а я неправильно написал. Надеюсь, финальный вариант:

location ~ .+/$ {
  rewrite (.+)/$ $1 permanent;
}


Подробная информация о списке рассылки nginx-ru