Клиент и сервер 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
Я перепробовал все, но не нашел решения
Любая помощь приветствуется
Когда я набираю
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,}) $
.