Apache HTTP LocationMatch Redirect с использованием отрицательного регулярного выражения

Я пытаюсь создать Redirect , используя mod_alias и ядро ​​ HTTP-сервера Apache в моей системе:

# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.1 (Maipo)
# rpm -q httpd
httpd-2.4.6-31.el7_1.1.x86_64
# 

- перенаправление всех запросов, кроме запроса на / server-status

# cat /etc/httpd/conf.d/_default.conf 
<VirtualHost *:80>
    ServerName _default_
    <LocationMatch "^/!(server-status)(.*)?">
        Redirect / http://X/
    </LocationMatch>
</VirtualHost>
# 

Я считаю, что моя проблема связана с регулярным выражением, поскольку я получаю 404 независимо от того, какой URL я нажимаю.

2
задан 2 November 2015 в 23:40
1 ответ

1 - Вы можете сделать это, используя мод rewrite https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

<VirtualHost *:80>
    ServerName _default_
    RewriteCond %{REQUEST_URI} !^/server-status
    RewriteRule (.*) http://X$1 [L,R=301]
</VirtualHost>

2 - Чтобы использовать Mod_Alias, вы требуется RedirectMatch http://httpd.apache.org/docs/current/mod/mod_alias.html

<VirtualHost *:80>
    ServerName _default_
    RedirectMatch 301 ^/(?!server-status)(.*) http://X/$1
</VirtualHost>

3 - дополнительная информация:

  • после изменения конфигурации необходимо перезапустить apache
  • сервер должен быть другим, иначе у вас будет цикл перенаправления

4 - Бонус

(. *) = поймать все в регулярном выражении

$ 1 = результат var

R = код состояния перенаправления, здесь у вас есть список:

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

L = флаг, что означает последний, здесь у вас есть коды списка флагов:

https://httpd.apache.org/docs /2.4/rewrite/flags.html[12112 impression5 - Еще больше ... если вы действительно хотите использовать LocationMatch, синтаксис:

<VirtualHost *:80>
    ServerName _default_
  <LocationMatch "^/(?!server-status)(.*)">
    Redirect / http://X/
  </LocationMatch>
</VirtualHost>
3
ответ дан 3 December 2019 в 10:41

Теги

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