0

我有 3 条“规则”。一个确保 URL 是小写的,另一个是在目录末尾包含一个斜杠,第三个是强制通过目录访问index.html页面。

我遇到的问题是,有时这会导致多次 301 重定向。我真的希望每个规则依次应用,然后如果需要重定向一次到最终 url。例如,可能需要将 url 转换为小写并添加斜杠。或者可能需要小写并从index.html更改为目录。

任何想法我怎么能做到这一点?非常感谢。

规则如下:

#LOWERCASE URLS For Directories, aspx, html files
RedirectRule ^/(.*[A-Z].*(/|\.html|\.aspx))$  /#L$1#E [R=301]


#ADD SLASH TO DIRECTORIES
#---------------------------------------------
#Perm Redirect If:
#Starts w/ Forward Slash
#Match Any Characters Except (. or ?) 1 or more times
#End w/ someting besides a dot, ?, or slash
#If So, Perm Redirect captured piece W/ Slash At End and at front
RedirectRule ^/([^.?]+[^.?/])$ /$1/  [I,R=301]


#CHANGE INDEX.HTML REQUESTS TO DIRECTORY REQUESTS
#---------------------------------------------
RedirectRule ^/(.*)/index\.html$ /$1/  [I,R=301]
4

3 回答 3

1

在 IIRF 论坛上有一个很好的答案。

于 2010-04-04T04:14:40.440 回答
0

我只看到将后两者结合起来的机会:

RedirectRule ^/([^A-Z?]*[A-Z].*(/|\.html|\.aspx))$  /#L$1#E [R=301]
RedirectRule ^/([^.?]+?[^.?/])(/index\.html)?$ /$1/ [I,R=301]
于 2009-11-19T14:48:37.387 回答
0

不幸的是,IIRF 论坛上的回复并没有解决多重重定向问题。每个规则仍然会导致自己的重定向。

使用 RewriteRule [没有重定向标志] 而不是 RedirectRule 会在 IIRF 状态中引发错误:

# rule:
# force HTTPS [disable on dev site until port 80 and port 443 served by same site]
# after rewrite continue with remaining tests
RewriteCond %{HTTPS}    off
RewriteRule ^/(.*)$ https://www.example.com/$1 [NC]

错误:C:\Inetpub\wwwroot\example-com\www\Iirf.ini(26):警告:重写为完全限定的 URL。大概是错的。您可能需要 RedirectRule 或 ProxyPass。

我预计 IIRF 会获取该规则的结果并再次通过 IIRF 规则将其发回,沿途拾取任何其他 URL 修改,并最终将单个 301 重定向发送回浏览器,最终结果为所有重写。据我了解, [N] 标志在 mod_rewrite 中执行此操作。

于 2016-09-08T20:53:22.663 回答