Правило перезаписи мода, которое просто получает часть URL после = - PullRequest
1 голос
/ 03 марта 2020

В настоящее время я пытаюсь перенаправить этот URL

http://dev.example.org/active/researchers/contact.php?IDENT=12345

на

http://portaldev.example.org/users/ident/12345

в htaccess.

Однако я могу получить перенаправление только на

http://portaldev.example.org/users/ident/IDENT=12345

, потому что не могу найти способ избавиться от IDENT=. Как я могу это сделать?

Условия переписывания в моем htaccess:

RewriteCond %{REQUEST_URI}  ^/active/researchers/contact\.php$ 
RewriteCond %{QUERY_STRING} ^IDENT=([0-9]*)$
RewriteRule ^(.*)$ http://portaldev.example.org/users/ident/$2 [R=302,NC,L]

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Получил ответ на мой вопрос для всех, кому нужна помощь:

RewriteCond %{REQUEST_URI}  ^/active/researchers/contact\.php$ 
RewriteCond %{QUERY_STRING} ^IDENT=(.*)
RewriteRule (.*)  http://portaldev.cepr.org/users/ident/%1? [R=301,L]

Я думаю, что главное было? в конце правила перезаписи, но оно также не будет работать, если я не добавлю первый RewriteCond для запроса uri и не использовал (. *) в правиле перезаписи

0 голосов
/ 03 марта 2020

Вероятно, это то, что вы ищете:

RewriteEngine on
RewriteCond %{QUERY_STRING} (?:^|&)IDENT=(\d+)(?:&|$)
RewriteRule ^/?active/researchers/contact\.php$  http://portaldev.example.org/users/ident/%1 [R=302,QSD,NC]

Хорошая идея - начать с временного перенаправления 302 и изменить его только на постоянное перенаправление 301 позже, как только вы будете уверены, что все правильно настроен. Это предотвращает проблемы с кэшированием при испытаниях ...

Эта реализация также будет работать в конфигурации хоста http-серверов или внутри распределенного файла конфигурации (файл ".htaccess"). Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http. Если вы используете распределенный файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация была включена вообще в конфигурации хоста и чтобы он находился в папке хоста DOCUMENT_ROOT.

И общее замечание: вы всегда должны предпочитать размещать такие правила в конфигурации хоста http-серверов вместо использования распределенных файлов конфигурации (".htaccess"). Эти распределенные файлы конфигурации добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера. Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).

...