#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