Alias WildCard
Возможность добавлять Alias по маске WildCard
This commit is contained in:
@@ -12,6 +12,70 @@ func StartHandler() {
|
||||
http.HandleFunc("/", handler)
|
||||
}
|
||||
|
||||
// Проверка wildcard паттерна для alias
|
||||
func matchWildcardAlias(pattern, host string) bool {
|
||||
// Если нет звёздочки - точное совпадение
|
||||
if !strings.Contains(pattern, "*") {
|
||||
return pattern == host
|
||||
}
|
||||
|
||||
// Поддержка wildcard: *.example.com, example.*, *example*, *
|
||||
// Заменяем * на регулярное выражение
|
||||
pattern = strings.ReplaceAll(pattern, ".", "\\.")
|
||||
pattern = strings.ReplaceAll(pattern, "*", ".*")
|
||||
pattern = "^" + pattern + "$"
|
||||
|
||||
// Простая проверка без regexp (более быстрая)
|
||||
return matchSimplePattern(pattern, host)
|
||||
}
|
||||
|
||||
// Простая проверка паттерна (без использования regexp для скорости)
|
||||
func matchSimplePattern(pattern, host string) bool {
|
||||
// Убираем ^ и $ добавленные выше
|
||||
pattern = strings.TrimPrefix(pattern, "^")
|
||||
pattern = strings.TrimSuffix(pattern, "$")
|
||||
|
||||
// Если паттерн = .* (любой хост)
|
||||
if pattern == ".*" {
|
||||
return true
|
||||
}
|
||||
|
||||
// Разбиваем паттерн на части по .*
|
||||
parts := strings.Split(pattern, ".*")
|
||||
|
||||
// Проверяем каждую часть
|
||||
currentPos := 0
|
||||
for i, part := range parts {
|
||||
if part == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
// Ищем часть в хосте начиная с текущей позиции
|
||||
idx := strings.Index(host[currentPos:], part)
|
||||
if idx == -1 {
|
||||
return false
|
||||
}
|
||||
|
||||
// Для первой части проверяем что она в начале (если паттерн не начинается с *)
|
||||
if i == 0 && !strings.HasPrefix(pattern, ".*") {
|
||||
if idx != 0 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// Для последней части проверяем что она в конце (если паттерн не кончается на *)
|
||||
if i == len(parts)-1 && !strings.HasSuffix(pattern, ".*") {
|
||||
if currentPos+idx+len(part) != len(host) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
currentPos += idx + len(part)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func Alias_check(r *http.Request) (alias_found bool, host string) {
|
||||
|
||||
alias_found = false
|
||||
@@ -20,10 +84,10 @@ func Alias_check(r *http.Request) (alias_found bool, host string) {
|
||||
|
||||
for _, alias := range site.Alias {
|
||||
|
||||
if alias == r.Host {
|
||||
// Поддержка wildcard паттернов
|
||||
if matchWildcardAlias(alias, r.Host) {
|
||||
alias_found = true
|
||||
return alias_found, site.Host
|
||||
|
||||
} else {
|
||||
alias_found = false
|
||||
}
|
||||
|
23
README.md
23
README.md
@@ -106,6 +106,29 @@ go build -o MyApp.exe
|
||||
- `Proxy_Service` - конфигурация прокси-сервисов
|
||||
- `Soft_Settings` - порты и хосты сервисов (MySQL, PHP, админка)
|
||||
|
||||
### 🌐 Alias с поддержкой Wildcard
|
||||
|
||||
Для сайтов поддерживается wildcard (`*`) в алиасах:
|
||||
|
||||
```json
|
||||
{
|
||||
"alias": [
|
||||
"*.test.ru", // Все поддомены voxsel.ru
|
||||
"*.test.com", // Все поддомены voxsel.com
|
||||
"test.com", // Точное совпадение
|
||||
"api.*" // api с любой зоной
|
||||
],
|
||||
"host": "test.ru"
|
||||
}
|
||||
```
|
||||
|
||||
**Примеры работы wildcard:**
|
||||
- `*.example.com` → `api.example.com`, `admin.example.com`, `test.example.com` ✅
|
||||
- `example.*` → `example.com`, `example.ru`, `example.org` ✅
|
||||
- `*example.com` → `test-example.com`, `my-example.com` ✅
|
||||
- `*` → любой домен ✅ (осторожно!)
|
||||
- `example.com` → только `example.com` ✅ (без wildcard)
|
||||
|
||||
### 🔄 Прокси-сервер
|
||||
|
||||
Прокси-сервер позволяет перенаправлять внешние запросы на локальные сервисы.
|
||||
|
Reference in New Issue
Block a user