htaccess переписать. всегда заменяйте первую часть после домена - PullRequest
0 голосов
/ 10 ноября 2019

Моя основная точка входа URL API: https://www.sample -domain.com / abc / , и тогда у меня может быть URI_REQUESTS, который будет следовать, например:
https://www.sample -domain.com / abc /
https://www.sample -domain.com / abc / ? do = что-то
https://www.sample -domain.com / abc / john (с косой чертой или без ..)

Я хочу всегда иметь возможность переписать любой запрос с первымчасть URL отличается от / abc /. Примеры:
https://www.sample -domain.com / def / (с косой чертой или без ..)
https://www.sample -domain.com / def / ? Do = что-то или
https://www.sample -domain.com / def / john
Мне все равно, сколькоЧасти, которые URL-адрес будет иметь после первой части, если есть косые черты или какие-либо строки запроса. Я уже хотел изменить первую часть, следующую за доменом, обратно на / abc /

Но некоторые первые части следует игнорироватьНапример, если он указан как sample-domain.com/help/, он не должен переписывать

1 Ответ

0 голосов
/ 10 ноября 2019

Выглядит довольно просто:

RewriteEngine on
RequestCond %{REQUEST_URI} !^/abc/
RequestCond %{REQUEST_URI} !^/(help|help2|help3)/
RewriteRule ^/?[^/]+/(.*)$ /abc/$1 [END,QSA]

В случае, если вы получаете внутреннюю ошибку сервера (http http 500) по приведенному выше правилу, есть вероятность, что вы используете очень старую версию http-сервера apache. В этом случае вы увидите определенный намек на неподдерживаемый флаг [END] в файле журнала ошибок http-серверов. Вы можете попробовать обновить или использовать более старый флаг [L], он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от ваших настроек.

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

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

...