htaccess force https + redirect to subirectory

时间:2017-09-06 11:49:03

标签: .htaccess redirect mod-rewrite

我的网站(website.com)位于目录:public_html / dirName /

我试图:

  • 将所有流量重定向到 dirName 子目录,而不会在网址中显示 dirName
  • 强制https for domain
  • 我想出了第一个条件:

    RewriteCond %{REQUEST_URI} !^/dirName/.*$ RewriteRule ^(.*)$ /dirName/$1 [L]

    我发现了这段代码用于https:

    RewriteCond %{SERVER_PORT} 80 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

    但我无法弄清楚如何将它们混合在一起。

    现在,我有https://www.website.com工作。但是website.com,www.website.com或http://www.website.com将所有内容重定向到https://www.website.com/dirName

    3 个答案:

    答案 0 :(得分:0)

    我没有混合它们,但它的工作原理如下:

    RewriteEngine on
    
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    RewriteCond %{HTTP_HOST} !^www\.website\.com$ [NC]
    RewriteRule ^(.*)$ http://www.website.com/$1 [R=301,L]
    
    RewriteCond %{REQUEST_URI} !^/dirName/.*$
    RewriteRule ^(.*)$ /dirName/$1 [L]
    

    答案 1 :(得分:0)

    您可以使用(混合版本):

    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www\. [OR,NC]
    RewriteCond %{HTTPS} off 
    RewriteRule ^ https://www.website.com%{REQUEST_URI} [NE,R=301,L]
    RewriteRule ^((?!dirName/).*)$ /dirName/$1 [L]
    

    因为您在重定向到https(仅一次重定向)后不应重定向到www。甚至更少重定向到http://www(而不是https)

    答案 2 :(得分:0)

    如克鲁斯所说

    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www\. [OR,NC]
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://www.domainname.in%{REQUEST_URI} [NE,R=301,L]
    

    但是我删除了最后一行RewriteRule ^((?!dirName/).*)$ /dirName/$1 [L] =>给内部服务器报错。现在,它对我来说非常完美。