Задать вопрос
teet
@teet

Как изменить uri на новый (для обработки другим локейшном) без редиректа?

Перенес старый проект на новую cms (open-real-estate) написанную на yii.
Есть необходимость редиректить старые url на новые, но без редиректа клиента.
вот 2 моих решения:
1.
rewrite ^/cg-([0-9]*)[/]*$ /property/cg-$1 permanent;

это работает, но это редирект (так не устраивает).

2.
location ~ ^/cg-([0-9]*)[/]*$ {
    try_files $uri /property/cg-$1;
  }

это не работает.

Ниже приведен полный конфиг nginx.
server {
  listen  80;
  server_name  localhost;
  charset utf-8;
  error_log  /home/costa/logs/nginx.log;

  root   /home/costa/html;
  index  index.php;

#  rewrite ^/cg-([0-9]*)[/]*$ /property/cg-$1 permanent;

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

  location ~ ^/cg-([0-9]*)[/]*$ {
    try_files $uri /property/cg-$1;
  }

  location ~ \.php$ {
    include  fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
    fastcgi_pass  unix:/var/run/php-fpm.sock;
  }

  location ~* \.(jpg|jpeg|gif|ico|png|xml|zip|css|js|html|json|txt|swf|mov)$ {
    try_files  $uri =404;
    expires  max;
  }

  location ~ /\. {
    deny  all;
    log_not_found  off;
  }
}
  • Вопрос задан
  • 840 просмотров
Подписаться 2 Оценить 3 комментария
Решения вопроса 1
Bahusss
@Bahusss
Python Master
Предлагаю скомбинировать:

location ~ ^/cg-([0-9]*)[/]*$ {
    rewrite ^/cg-([0-9]*)[/]*$ /property/cg-$1 break;
    try_files $uri @php;
}

location @php {
    include  fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
    fastcgi_pass  unix:/var/run/php-fpm.sock;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
copist
@copist
Empower people to give
Посмотри документацию на nginx/rewrite
Если правило "куда" не включает схему (http:// или https://), то можно сделать внутренний редирект.

Файлы
/old/path/index.html с текстом "Old";
/new/path/index.html с текстом "New";
download?id=AmPy05G2J5pmqNOR6UxhRP56pXVj

Попробуй такое правило
location ~ /old/path {
    rewrite /old/path(.*) /new/path$1 break;
}

У меня браузер остался с прежним URL, но показал файл по новому пути
download?id=jNnoITrzRcwF9wcxezeF8AzSoWp6
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы