Я пытаюсь создать 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 я нажимаю.
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 - дополнительная информация:
4 - Бонус
(. *) = поймать все в регулярном выражении
$ 1 = результат var
R = код состояния перенаправления, здесь у вас есть список:
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
L = флаг, что означает последний, здесь у вас есть коды списка флагов:
<VirtualHost *:80>
ServerName _default_
<LocationMatch "^/(?!server-status)(.*)">
Redirect / http://X/
</LocationMatch>
</VirtualHost>