使用负RegEx的Apache HTTP LocationMatchredirect

我正在尝试在我的系统上使用Apache HTTP Server的mod_alias和core创build一个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 # 

要求是redirect所有的请求,除了请求到/server-status

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

我相信我的问题是在正则expression式的地方,因为无论我打哪个URL,我都会得到404。

1 – 你可以使用mod重写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 – 更多信息:

  • 一旦configuration被更改,apache需要重新启动
  • 服务器需要不同,否则你将有一个redirect循环

4 – 奖金

(。*)=捕获所有正则expression式

$ 1 =结果var

R =redirect状态码,这里有你的清单:

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>