![Apache HTTP LocationMatch 使用负正则表达式重定向](https://linux22.com/image/670133/Apache%20HTTP%20LocationMatch%20%E4%BD%BF%E7%94%A8%E8%B4%9F%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E9%87%8D%E5%AE%9A%E5%90%91.png)
我正在尝试创建一个Redirect
使用 Apache HTTP Server 的mod_alias和核在我的系统上:
# 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
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-更多信息:
- 一旦配置改变,Apache 需要重新启动
- 服务器需要不同,否则你将有一个重定向循环
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>