Apache 使用mod_rewrite简化一系列重定向

Apache 使用mod_rewrite简化一系列重定向,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我的客户拥有MAINSITE.com的SSL证书,但通过OTHERSITE.com获得了大量流量 客户端希望所有访问者始终使用HTTPS 因此,我的规则是首先检查OTHERSITE.com并重定向到if-found 然后我检查是否使用HTTPS,如果没有,则重定向 然后有一系列规则旨在使用URL中的子目录来提取内容和加载模板 我的问题是,这些规则是否有应有的效率,以及是否有人认为它们的编写方式存在问题?我不是修改专家 另外,我们有一些用户报告说IE在加载URL的WWW版本时对他们进行了解救,但我

我的客户拥有MAINSITE.com的SSL证书,但通过OTHERSITE.com获得了大量流量

客户端希望所有访问者始终使用HTTPS

因此,我的规则是首先检查OTHERSITE.com并重定向到if-found

然后我检查是否使用HTTPS,如果没有,则重定向

然后有一系列规则旨在使用URL中的子目录来提取内容和加载模板

我的问题是,这些规则是否有应有的效率,以及是否有人认为它们的编写方式存在问题?我不是修改专家

另外,我们有一些用户报告说IE在加载URL的WWW版本时对他们进行了解救,但我不明白为什么?有什么建议吗

ErrorDocument 404 /index.php

RewriteEngine on

RewriteCond %{HTTP_HOST} OTHERSITE.com [NC]
RewriteRule ^(.*)$ https://MAINSITE.com/$1 [L,R=301]

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteBase /

RewriteRule ^products - [L,NC]

RewriteRule ^sauces$ /sauces.php?sauce=our-hot-sauce [L,QSA]

RewriteRule ^sauces/([^/\.]+)/?$ /sauces.php?sauce=$1 [L,QSA]

RewriteRule ^recipes/([^/\.]+)/?$ /recipes.php?cat=$1 [L,QSA]

# user has cleared recipe name but not cat AND left trailing slash
RewriteRule ^recipe/([^/\.]+)/$ /recipes.php?cat=$1 [L,QSA]

# has sauce/cat and recipe name
RewriteRule ^recipe/([^/\.]+)/([^/\.]+)/?$ /recipe.php?cat=$1&rec=$2 [L,QSA]

# user has cleared recipe name but not cat
RewriteRule ^recipe/([^/\.]+)$ /recipes.php?cat=$1 [L,QSA]

RewriteRule ^([^/\.]+)/?$ /page.php?page=$1 [L,QSA]

RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /page.php?page=$1&sub=$2 [L,QSA]

RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /page.php?page=$1&sub=$2&subsub=$3 [L,QSA]

RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /page.php?page=$1&sub=$2&subsub=$3&subsubsub=$4 [L,QSA]

RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /page.php?page=$1&sub=$2&subsub=$3&subsubsub=$4&subsubsubsub=$5 [L,QSA]

其他规则如fine,但前2个
301
规则可以合并为一个:

RewriteCond %{HTTP_HOST} ^(www\.)?OTHERSITE\.com$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule ^ https://MAINSITE.com%{REQUEST_URI} [L,R=301,NE]

人们是否也通过https访问其他站点?如果是这样的话,那么他们将在您的任何重定向发生之前收到关于主机名/证书名不匹配的ssl警告。只有在他们决定键入https时,才会有人使用https访问othersite.com。https下不存在对该站点的引用