繁体   English   中英

在多域站点上使用mod_rewrite htaccess强制使用www和尾部斜杠

[英]Enforce www and trailing slash with mod_rewrite htaccess on a multi-domain site

我的目标是在多域环境中强制使用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]

该规则可以添加尾部斜杠,但是会将子域重定向回根域。

您是否可以推荐一种解决方案,将这些规则组合成尽可能少的选项,同时实现我的目标并避免多次重定向?

对于RewriteRule指令,将模式与对应于请求的文件系统路径进行匹配。 因此,要么将RewriteCond与合适的变量一起使用,要么在构建替换项时使用适当的变量来生成URL而不是路径。

你有没有尝试过

RewriteCond %{QUERY_STRING} ^$    [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^((.*/)?[^/\.]+)$ http%1://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L]

那应该是与其他两个规则最同步的表述方式。 不过,您将必须为此添加一个条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM