- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
site.com/link/my1-link
Нужно, чтобы параметр my1-link перенаправлялся на site.com/base/main.php?name=my1-link и там обрабатывался.
Если делать перенаправление на Apache, то регулярка в конфиге работает без проблем:
RewriteRule "^link/([a-z0-9'+\w-]+)" "base/main.php?name=$1" [L,QSA]
А вот nginx дефис(-) не воспринимает вообще. Пробовал обозначать дефис в конфиге регуляркой разными вариантами: \x2d - \- \w-. Отдельно каждый вариант или все вместе. А Apache любой вариант работает, а в nginx с тире никакой. GET в PHP получает обрезанный параметр my1 без дефиса и всего остального.
location / {
rewrite ^link/([a-z0-9+'\w-]+) /base/main.php?name=$1 break;
Можно как-нибудь решить эту проблему?
В NGINX правило перезаписи URL-адресов записывается с использованием директивы "rewrite". Аналогичное правило для NGINX, эквивалентное вашему примеру для Apache с использованием RewriteRule, будет выглядеть следующим образом:
rewrite "^/link/([a-z0-9'+\w-]+)" /base/main.php?name=$1 last;
Убедитесь, что правило находится в правильном месте в конфигурационном файле. Правила перезаписи в NGINX обрабатываются в порядке, указанном в конфигурационном файле. Если правило находится в неправильном месте, то оно может быть неприменимым или перезаписать URL-адрес неправильно.
Проверьте, что регулярное выражение правильно соответствует URL-адресу. Если регулярное выражение не соответствует URL-адресу, то правило перезаписи не будет применено.
Убедитесь, что правило перезаписи имеет правильный синтаксис. Если правило содержит синтаксические ошибки, то оно не будет применено.
Проверьте, что запрос находится в нужном контексте. Некоторые директивы в NGINX, такие как location, server, if, имеют свой контекст и определенные условия, при которых запрос может быть обработан правильно.
Если вы не можете найти причину проблемы, то можно попробовать добавить директиву "rewrite_log on" в конфигурационный файл. Она позволит записывать в логи информацию о перезаписи URL-адресов и может помочь выявить ошибки в правилах.
***
Для включения логирования перезаписи URL-адресов в NGINX необходимо добавить директиву rewrite_log on; в раздел http в конфигурационном файле сервера.
Например, чтобы включить логирование перезаписи в файл /var/log/nginx/rewrite.log , можно добавить следующую строку в конфигурационный файл NGINX:
http {
...
rewrite_log on;
error_log /var/log/nginx/error.log;
...
}
После внесения изменений в конфигурационный файл необходимо перезапустить сервер NGINX для применения новых настроек.
После этого NGINX будет записывать информацию о перезаписи URL-адресов в лог-файл, который можно найти в указанном пути ( /var/log/nginx/rewrite.log в нашем примере). Эта информация может помочь в выявлении проблем в правилах перезаписи и определении того, как они применяются к запросам.
Между прочим.
Когда есть \w, то в
a-z0-9 можно удалить
rewrite ^link/([a-z0-9+'\w-]+) /base/main.php?name=$1 break;
Попробуйте так
Можно как-нибудь решить эту проблему?
Вырезать отсюда
site.com/link/my1-link
на стороне php, если это возможно ($_SERVER['REQUEST_URI']).
Как по мне, пробрасывание GET параметрами - прошлый век