Отрицание URL пространства пользователя в Apache - PullRequest
1 голос
/ 02 декабря 2010

У меня есть ситуация, когда я пытаюсь использовать директиву Apache RedirectMatch для перенаправления всех пользователей на URL-адрес HTTPS , за исключением одного (Linux) пользователя, который получает доступ к своему собственному веб-пространству.Я нашел фрагмент кода регулярного выражения, который отменяет имя пользователя:

 ^((?!andy).)*$

, но когда я пытаюсь использовать его в директиве:

RedirectMatch ^((?!andy).)*$ https://www.example.com/

URL:

http://www.example.com/~andy/

по-прежнему перенаправляется на HTTPS URL:

https://www.example.com/

Когда я хочу, чтобы оно игнорировало перенаправление.Я не специалист по регулярным выражениям (или Apache), поэтому любая помощь в получении этой работы будет принята с благодарностью.

Спасибо, Стивен

Редактировать: ОК, сюжет утолщается ...если я закомментирую строку:

# RedirectMatch ^((?!andy).)*$ https://www.example.com/

и перезапущу Apache, а затем попробую URL:

http://www.example.com/andy

, я получу ответ 404, что ожидается.Но, если я попробую URL:

http://www.example.com/~andy

Перенаправление сработало, и я перенаправлен на:

https://www.example.com/

, и, как я уже сказал, перенаправление закомментировано, и я перезапустилсервер.Как это может случиться?Так что это не просто регулярное выражение, похоже, Apache перенаправляет без инструкций!

1 Ответ

0 голосов
/ 02 декабря 2010

Что-то вроде этого может быть? (Использует mod_rewrite вместо mod_alias)

RewriteCond %{REQUEST_URI} !^/~andy(/|$) ...
RewriteCond %{SCRIPT_URI} ^http:
RewriteRule ^/(.*) https://mysite.com/$1 [R=307]
...