Как настроить клиент OpenVPN для принудительного прохождения трафика через VPN-сервер?

Клиент и сервер OpenVPN настроены и работают очень хорошо. Однако сетевой трафик идет от клиента к серверу VPN только для внутреннего трафика (например, * .mydomain. К www.example.com/username Ниже мой файл htaccess Параметры Все -Индексы RewriteEngine On RewriteCond% {...

Мне нужен следующий URL www.example.com/userprofile.php?username=username Кому www.example.com/username
Ниже мой файл htaccess

Options All -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^([^\.]+)$ $1index [NC,L]
RewriteRule ^([^\.]+)$ $1login [NC,L]
RewriteRule ^(.*)$ userprofile.php?username=$1 [QSA]

Когда я набираю www.example.com/username , имя пользователя GET отображается как

username.php

Я перепробовал все, но не нашел решения
Любая помощь приветствуется

1
задан 25 February 2018 в 19:58
1 ответ

Когда я набираю www.example .com / username имя пользователя GET отображается как username.php

, потому что у вас есть перезапись ранее в файле:

 RewriteCond% {REQUEST_FILENAME}! -f
RewriteRule ^ ([^ \.] +) $ $ 1.php [NC, L]
 

, который перезаписывает / username (любой запрос, который не соответствует существующему файлу) в /username.php до того, как переписывает это в userprofile.php? имя пользователя = username.php . Следовательно, почему вы видите значение параметра GET с суффиксом .php .

Аналогичным образом, следующие две директивы RewriteRule в настоящее время ничего не делают, так как предыдущее правило улавливает запрос.

 RewriteRule ^ ([^ \.] +) $ $ 1index [NC, L]
RewriteRule ^ ([^ \.] +) $ $ 1login [NC, L]
 

И они будут конфликтовать только с перезаписью «имени пользователя», если мы изменим предыдущую перезапись, добавив расширение .php . Но также эти два правила конфликтуют друг с другом - вы сопоставляете один и тот же URL-адрес с обоими - первое правило всегда будет выигрывать. (Один вход с двумя разными выходами невозможен ни в каком сценарии.) Фактически, это, скорее всего, приведет к циклу перезаписи.

Эти две директивы следует удалить.


Чтобы избежать .php ] добавляется к имени пользователя , вы можете проверить, существует ли файл .php , прежде чем перезаписать его. Например:

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Однако я бы также подумал об изменении структуры вашего URL-адреса, чтобы вы могли легко настраивать таргетинг на URL-адреса, в которых конкретно указано имя пользователя. Например:

www.example.com/u/username

Тогда ваша директива может быть написана менее двусмысленно (и не будет так зависеть от порядка директив в вашем файле):

RewriteRule ^u/(.*)$ userprofile.php?username=$1 [QSA,L]

Кроме того, будьте более конкретными в регулярном выражении, которое захватывает имя пользователя. Шаблон . * захватывает что угодно . Например, если имена пользователей могут содержать только буквы a ..z затем используйте регулярное выражение вроде ^ u / ([a-z] +) $ . И если имя пользователя должно состоять из 4 или более символов, тогда: ^ u / ([a-z] {4,}) $ .

0
ответ дан 4 December 2019 в 04:13

Теги

Похожие вопросы