私のシステムでApache HTTP Serverの mod_alias と core を使用してRedirect
を作成しようとしています:
# 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>
#
どのURLをヒットしても404になるので、私の問題は正規表現のどこかにあると思います。
1-mod 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 =結果の変数
R =リダイレクトステータスコード、ここにリストがあります:
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
L =最後に意味するフラグ最後に、ここにフラグリストコードがあります。
https://httpd.Apache.org/docs/2.4/rewrite/flags.html
5-さらに... LocationMatch構文を本当に使用したい場合:
<VirtualHost *:80>
ServerName _default_
<LocationMatch "^/(?!server-status)(.*)">
Redirect / http://X/
</LocationMatch>
</VirtualHost>