Apache 强制www和重定向根目录

Apache 强制www和重定向根目录,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我找不到一个能回答我的问题,或者我无法使用正确的术语进行搜索,但是来吧。我的htaccess中有以下规则: RewriteEngine On RewriteCond %{HTTP_HOST} ^domain\.com\.br$ [OR] RewriteCond %{HTTP_HOST} ^www\.domain\.com\.br$ RewriteRule ^(.*)$ "https\:\/\/www\.domain\.com\.br\/site" [R=301,L] RewriteEngine

我找不到一个能回答我的问题,或者我无法使用正确的术语进行搜索,但是来吧。我的htaccess中有以下规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com\.br$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com\.br$
RewriteRule ^(.*)$ "https\:\/\/www\.domain\.com\.br\/site" [R=301,L]
RewriteEngine On

# force https
RewriteCond %{HTTPS} off [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# force www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# redirect root directory to /site/
RewriteRule ^/?$ /site/ [R=301,L]
当用户仅输入URL(
domain.com.br
www.domain.com.br
)时,此功能有效,但当用户以这种方式访问时,我需要它重定向:

domain.com.br或www.domain.com.br-->
domain.com.br/XXX-->

我应该使用什么规则

更新:服务器已经有了强制SSL的默认规则,在这种情况下,没有必要将其置于htaccess中

规则更新:

**On virtual host:**
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

**On htaccess file:**
RewriteCond %{HTTP_HOST} ^domain\.com\.br$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com\.br$
RewriteRule ^/?$ https://www.domain.com.br/site/ [R=301,L]

您的代码生成一个重定向循环。此外,您不需要避开目标上的斜杠

您可以合并虚拟主机块内的所有内容(比使用htaccess更快):

当然,您将看到一个重定向链,例如
http://domain.tld/
因为它将首先重定向到
https://domain.tld/
然后转到
https://www.domain.tld/
最后到
https://www.domain/tld/site/
。这很好。然而,如果你真的想用一个重定向来处理所有事情,你可以。但是,它将不那么通用

例如,您将以以下规则结束:

RewriteEngine On

# force root directory to /site/ (https+www)
RewriteRule ^/?$ https://www.domain.com.br/site/ [R=301,L]

# force any other pages to https+www if not the case already
RewriteCond %{HTTPS} off [NC,OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.domain.com.br%{REQUEST_URI} [R=301,L]

你好,贾斯汀·尤尔曼,谢谢你的回答。但它没有像我需要的那样起作用。我忘了注释,服务器已经有了强制SSL的默认规则,在这种情况下,没有必要将其放在htaccess中。我需要的是,除了强制
www
,他还有一个规则,当您在浏览器中只键入域
(domain.com.br)
,在这种情况下,如果您只键入域,而不键入页面名,它应该始终重定向到
/站点
。有可能吗?我不确定我是否理解。你的意思是当你进入
https://domain.com.br
它重定向到
www
/site
,即
https://www.domain.com.br/site
?您好,我用我需要的三条规则更新了问题,看一看。如果用户直接访问域而没有输入特定的页面名
(domain.com.br或www.domain.com.br)
,则如果用户输入带有特定页面的url,例如
www.domain.com.br/contact
,则应将其重定向到
www.domain.com.br/站点
,在这种情况下,规则只应添加
www
。请参阅我编辑的答案。因此,现在,(1)
www
被添加,如果它不在域中,(2)
https://www.domain.com.br/
重定向到
/site
,而其他页面保持原样。是吗?是的,但他正在创建重定向循环查看访问的所有方法:1:
https://nimb.ws/Uy1Onu
2:
https://nimb.ws/TwHohl
3:
https://nimb.ws/w5rpqL
4:
https://nimb.ws/5Qed92
(这里没有放www)5:
https://nimb.ws/mnWwIT
这样,由于循环,它会减慢访问速度。