301 перенаправление с помощью nginx

#nginx #permalinks

#nginx #постоянные ссылки

Вопрос:

Я переместил URL-адреса своего веб-сайта из этой формы:

 https://example.com/category/sub-category/post-url
https://example.com/category/post-url
  

в эту форму:

 https://example.com/post-url
  

И я хотел бы настроить перенаправление nginx, чтобы я не терял посетителей, проходящих по старым URL.

Я нашел регулярное выражение, которое мне нужно использовать, которое просто ([^/] $) (Занимает весь текст после последней косой черты). Но как я могу настроить это для использования с nginx?

Ответ №1:

В записи вашего серверного блока вам необходимо добавить:

 server {
  ...
  # Your match:
  rewrite ^/[^/] /(.*) /$1 redirect;
  # Probably a better regex (I cannot test)
  # rewrite ^/.*/([^/.]*)$ /$1 redirect;
  ...
}
  

redirect выдаст статус 302, если вы хотите постоянное перемещение (что опасно), тогда используйте permanent (301). Регулярное выражение в основном соответствует вашему (хотя на практике я не думаю, что оно будет делать то, что вы хотите.. вам нужно, чтобы он полностью совпадал со всеми, кроме последней косой черты, я добавил альтернативу, которую вы, возможно, захотите запустить через тестер Nginx), с совпадением группировки (.*) , на которое затем ссылается перенаправление как $1

Обновления для css / js / jpg / gif / png

Это становится халтурным, но поскольку ваши post-URL, похоже, не содержат точки ( . ), мы можем отфильтровать групповое совпадение, чтобы исключить точки, что приводит к тому, что любой URL, заканчивающийся на file.ext from, не совпадает.

Используя тестер регулярных выражений на ^/.*/([^/.]*)$ , мы можем найти разумную точность (без фактических сведений о том, что у вас есть):

Соответствие:

 /category/sub-category/post-url
/category/post-url
  

Не соответствует:

 /images/blog.jpg #no match
/css/main.css #no match
/js/app.js
/favicon.ico
  

Однако, если ваши post-URL могут содержать точки, это не сработает. Кроме того, если у вас есть какие-либо статические файлы, которые не содержат точек — это не сработает (вам нужно будет более конкретно указывать в регулярном выражении URL-адреса, которые совпадают / не совпадают)

Комментарии:

1. Обе сломали мой сайт. CSS / Javascript больше не могут загружаться.

2. Вы не указали, что вам нужна ни одна из них в вашем вопросе! Поскольку у вас нет расширений в ваших статьях, и я предполагаю, что стиль, изображения и JS находятся в файлах с расширениями ( .css , .jpg , .gif .png , .js ,,,,), я заблокировал dot при сопоставлении групп — это своего рода взлом

3. Теперь загружается CSS / JS, но не изображения. Кроме того, сообщения не загружаются (они всегда перенаправляют все на домашнюю страницу example.com ).

Ответ №2:

самый простой способ сделать это — файл .htaccess. просто создайте текстовый файл с именем .htaccess (без .txt в конце!). со следующей строкой:

 Redirect /olddirectory/oldfile.html http://example.com/newdirectory/newfile.html
  

импортируйте это в nginx.config

В противном случае:

 server {
    listen 80;
    listen 443 ssl;
    server_name old url;
    return 301 $scheme://new url;
}
  

Комментарии:

1. nginx не поддерживает файл .htaccess. Ваш ответ совершенно не связан с моим вопросом.

2. не напрямую, но вы можете импортировать .htaccess в nginx.conf