Apache 强制www和重定向根目录
我找不到一个能回答我的问题,或者我无法使用正确的术语进行搜索,但是来吧。我的htaccess中有以下规则: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
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
这样,由于循环,它会减慢访问速度。