1

在我的 htaccess 中,我使用此代码将所有非 www 请求重定向到 www,除了一个删除 www 的目录和 httpS(如果强制)。

RewriteCond $1 !^example1
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/example1/(.*) [NC]
RewriteRule ^(.*)$ https://example.com/example1/%1 [R=301,L]

我的问题是当我想添加更多异常时,例如 example2。我该怎么做呢?

此外,如果异常目录比 www.example.com/dir/example3 低一级,我该怎么办?

4

1 回答 1

0

好吧,有两种选择:

  1. 您必须指定正则表达式而不是文字字符串,并且该正则表达式必须匹配所有异常。

  2. 你使用重写地图。我建议你看一下文档。


使用正则表达式:

# some expections
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/(example[0-9]+.*)$ [NC]
RewriteRule ^(.*)$ https://example.com/%1 [R=301,L]

# the default rule: => add "www."
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

我扭转了局面,在开始时有异常,最后是“全部捕获”默认值。显然,您可以通过将第一行加倍来添加更多例外。或者通过更改正则表达式。请注意,显然所需的正则表达式的详细信息取决于您拥有的异常集合。只有你知道......我建议你阅读优秀的手册


除了更复杂的正则表达式,您还可以在条件块内使用逻辑运算符:

# some expections
RewriteCond %{HTTPS} =off [NC]
RewriteCond %{REQUEST_URI} ^/(example1.*)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/(example2.*)$ [NC]
RewriteRule ^(.*)$ https://example.com/%1 [R=301,L]

# the default rule: => add "www."
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

在谈到重写时,有两件重要的事情不能经常重复:

  1. 阅读手册!它非常好,带有精确的描述和很好的例子。

  2. 如果您有权访问主服务器配置,则使用 REWRITE DEBUGGING:重写模块为此定义了两个RewriteLog命令RewriteLogLevel。配置一些日志文件和级别可能为 7。然后发出一个请求并监视日志文件中的新条目(使用tail -f /path/to/logfile)。这有助于了解重写引擎内部发生了什么以及意外事情开始发生的地方。

于 2012-11-22T16:36:45.207 回答