1

我有一种情况,我试图使用 Apache 的 RedirectMatch 指令将所有用户重定向到 HTTPS URL,但访问自己的 webspace 的单个 (Linux) 用户除外。我发现了一段否定用户名的正则表达式代码:

 ^((?!andy).)*$

但是当我尝试在指令中使用它时:

RedirectMatch ^((?!andy).)*$ https://www.example.com/

网址:

http://www.example.com/~andy/

仍然被重定向到 HTTPS URL:

https://www.example.com/

当我希望它忽略重定向时。我不是正则表达式(或 Apache)方面的专家,因此将不胜感激任何帮助。

谢谢,斯蒂芬

编辑:好的,情节变厚了......如果我注释掉这条线:

# RedirectMatch ^((?!andy).)*$ https://www.example.com/

并重新启动 Apache,然后尝试 URL:

http://www.example.com/andy

我收到 404 响应,这是预期的。但是,如果我尝试 URL:

http://www.example.com/~andy

重定向被触发,我被重定向到:

https://www.example.com/

正如我所说,重定向已被注释掉,我已经重新启动了服务器。这怎么可能发生?所以这不仅仅是一个正则表达式的事情,似乎 Apache 在没有指令的情况下重定向!

4

1 回答 1

0

大概是这样的?(使用 mod_rewrite 而不是 mod_alias)

RewriteCond %{REQUEST_URI} !^/~andy(/|$) ...
RewriteCond %{SCRIPT_URI} ^http:
重写规则 ^/(.*) https://mysite.com/$1 [R=307]
于 2010-12-02T11:01:24.807 回答