我的目标是在多域环境中强制执行 www 和 url 上的斜杠以实现此目的:
http://mydomain.com/company -> http://www.mydomain.com/company/
问题是某些子域必须从 www 前缀中排除,但仍强制使用尾部斜杠,例如:
http://m.mydomain.com/company -> http://m.mydomain.com/company/
另一个因素是我需要维护任何子域以避免多次重定向。例如:
http://dev.mydomain.com/login -> http://dev.mydomain.com/login/
多次重定向将导致:
http://dev.mydomain.com/login -> http://mydomain.com/login/
需要避免这种情况,以使用户保持在当前的开发或移动站点上。
到目前为止我所拥有的:
# Convert http://mydomain.com/company -> http://www.mydomain.com/company/
# Enforce www and trailing slash
# If you have subdomains, you can add them to
# the list using the "|" (OR) regex operator
RewriteCond %{HTTP_HOST} !^(www|dev|m)\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L]
这适用于缺少 www 前缀和尾部斜杠的域,并将它们都添加到 1 个重定向中。
# Convert http://mydomain.com/company/ -> http://www.mydomain.com/company/
# Enforce www
# If you have subdomains, you can add them to
# the list using the "|" (OR) regex operator
RewriteCond %{HTTP_HOST} !^(www|dev|m)\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
如果存在尾部斜杠,则此方法有效,如果缺少,则添加 www 前缀。
如果存在子域并且缺少尾部斜杠,我无法弄清楚的是一种重定向用户的方法。
RewriteCond %{QUERY_STRING} ^$ [NC]
RewriteRule ^((.*/)?[^/\.]+)$ /$1/ [R=301,L]
此规则用于添加尾部斜杠,但会将子域重定向回根域。
您能否推荐一个解决方案,将这些规则组合成尽可能少的选项,同时实现我的目标并避免多次重定向?