Имя: Пароль:
IT
Веб-мастеринг
Как в Apache изменить URL для доступа к http-сервису
0 pavlushov
 
03.01.23
18:00
Сделал http-сервис и получил URLы вида ИмяХоста/ИмяСервиса/hs/v1. Заказчик же требует URLы вида ИмяХоста/v1. Можно ли на уровне апач преобразовать урлы, чтобы заказчик передавал URL вида ИмяХоста/v1 а в 1с прилетал запрос уже с URL вида ИмяХоста/ИмяСервиса/hs/v1?
1 Волшебник
 
модератор
03.01.23
18:02
2 Garykom
 
гуру
03.01.23
18:03
(0) классически это делают через nginx перед апачем
3 vde69
 
03.01.23
18:05
(2) классически это (1)

nginx главным образом используют для кеширования статических данных, ну или можно юзать его как единстве5нный сервер, но это другая история.
4 Волшебник
 
модератор
03.01.23
18:08
(3) nginx тоже такое умеет

Для этого в его conf должны быть строчки типа

server {
    location /name1 {
        rewrite ^/name1(.*)$ /name2$1;
    }
}
5 pavlushov
 
03.01.23
18:10
(1) спасибо, я правильно понимаю что изменения вносятся в файл httpd.conf?
6 Волшебник
 
модератор
03.01.23
18:11
(5) Давненько я не брал в руки Apache... Мы сидим на nginx
7 Garykom
 
гуру
03.01.23
18:15
(4) подразумевал nginx как обратный прокси к апачу через proxy_pass
https://learn.microsoft.com/ru-ru/troubleshoot/developer/webapps/aspnetcore/practice-troubleshoot-linux/2-2-install-nginx-configure-it-reverse-proxy
8 vde69
 
03.01.23
18:22
(5) если не старый можно в .htaccess
9 pavlushov
 
03.01.23
18:54
(8) создать такой файл с любым именем в директории с публикацией и в нем описать правило?
10 vde69
 
03.01.23
19:14
(9)
1. имя должно быть строго .htaccess (включая точку перед ним)
2. апач должен (и твой сайт) должен поддерживать файлы .htaccess (иногда их явным образом отключают)
3. версия апач должна поддерживать revrite для файлов .htaccess (на память не помню, вроде до версии 2.3 это нельзя было)
11 pavlushov
 
03.01.23
19:38
(10) видимо для 1с правила замены урл надо все таки прописывать в httpd.conf, только не понятно в каком месте, я добавил в конец файла 2 строки: RewriteEngine  on и RewriteRule    "^/v1$"  "MyHTTP/hs/v1" [QSA] - не прокатило
12 vde69
 
03.01.23
19:40
(11) сначало отладь правило на локальном ресе, без 1с
13 pavlushov
 
03.01.23
21:12
Не получается. Плохо, когда нет никаких знаний в вебе. У меня установлен апач, создана папка для публикации 1с, http сервис опубликован в этой папке лежит default.vrd. В файле httpd.conf настроена эта папка, включен rewrite_module. По кривому урлу все работает, в постмане или в браузере запрос проходит успешно. Если в  httpd.conf включить AllowOverride All чтобы можно было использовать .htaccess, куда положить этот файл? В папку с публикацией? Пробовал, не получается. Пробовал выключать AllowOverride none и добавлял строки в файл httpd.conf тоже не получается. Строки которые добавлял такие: <IfModule rewrite_module>
RewriteEngine on
RewriteRule "^localhost/v1/orders/85$" "localhost/MyHTTP/hs/v1/orders/85" [QSA]
</IfModule>
14 Грю
 
03.01.23
21:49
(13) Апач должен перечитать конфиг. Ты его перезагружал?
15 Грю
 
03.01.23
21:55
И убери localhost/
16 pavlushov
 
03.01.23
22:14
(14) перезапускал, видимо некорректно правило написал, буду дальше пытаться)
17 pavlushov
 
07.01.23
20:54
В конце файла httpd.conf добавляем:
<IfModule rewrite_module>
    RewriteEngine On
    RewriteRule ^/v1/(.*) MyHTTP/hs/v1/$1 [R,L]
</IfModule>
18 pavlushov
 
27.01.23
20:01
К сожалению способ не подошел. У моего сервиса есть один url с 4 методами. Это url "v1/order", который при публикации приобретает вид "myservice/hs/v1/order" и для него реализовано 4 метода - POST (создать заказ), PUT (изменить заказ), GET (получить заказ), DELETE (удалить заказ). При использовании вышеуказанного способа (с помощью mod_revrite) после переадресации срабатывает только метод GET. Не понимаю почему так происходит, ведь идет только изменение url, почему теряется метод мне не понятно. В общем любой запрос на url "v1/order" работает как GET, а POST - вообще дает ошибку 405 method not allowed. Люди добрые, подскажите пожалуйста, как же все таки добиться переадресации с сохранением метода? Дело в том, что я ничего не смыслю в вебе и сайтостроении, вот можно сказать первый опыт. Можно ли, например, создать такой каталог на компе "v1/order", положить в него какой то файл, в котором будет какой то код, который выполнит вызов нужного метода и url?
19 Garykom
 
гуру
27.01.23
20:18
20 Сергиус
 
27.01.23
20:19
(18)А без этого правила методы работают? Потому что ошибка "405 method not allowed" может и по другой причине быть.
21 pavlushov
 
27.01.23
20:29
Ура, ура!!! Я разобрался) Нашел статью https://developer.mozilla.org/ru/docs/Web/HTTP/Redirections, где написано что 301 - GET методы неизменны. Другие методы могут быть превращены в GET, а 308 - Метод и тело запроса неизменны. В итоге вот такой кусок в файле httpd.conf:
<IfModule rewrite_module>
    RewriteEngine On
    RewriteRule ^/v1/(.*) /GoldfishYaEda/hs/v1/$1 [R=308,L]
</IfModule>

просто надо было флаг R использовать с уточнением R=308