我有3条“规则”。一个是确保URL是小写的另一个是在目录末尾包含斜杠,而第三个是强制访问 index.html 页面而不是通过目录。
问题与我如何拥有它,有时这会导致多个301重定向。我真的希望依次申请每条规则然后如果必要的话重定向一次到最后的网址。例如,可能需要将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]
答案 0 :(得分:1)
对这个问题on the IIRF Forums有一个很好的答案。
答案 1 :(得分:0)
我只看到结合后两者的机会:
RedirectRule ^/([^A-Z?]*[A-Z].*(/|\.html|\.aspx))$ /#L$1#E [R=301]
RedirectRule ^/([^.?]+?[^.?/])(/index\.html)?$ /$1/ [I,R=301]
答案 2 :(得分: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中执行此操作。