htaccess - >需要将所有www重定向到非www和一个页面仅重定向到ssl

时间:2011-08-13 12:57:09

标签: .htaccess redirect

我看起来“无处不在”,但似乎无法想象这一点。

我需要htaccess为我做两件事:

  1. 强制所有www请求到非www请求
  2. 还强制所有页面上的http(非ssl),但在这种情况下我需要ssl
  3. 此外,这是一个使用永久链接的wordpress网站,所以我有一大块htaccess代码wordpress也放在那里。但不知怎的,一切都运行正常,除了当我进入需要被强制为ssl的页面时,它只是重定向到网站的根目录。

    这就是我的代码:

    RewriteEngine On RewriteBase /

    # Redirect from www to non-www
    RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301]
    
    # Turn SSL on for secure-page
    RewriteCond %{HTTPS} off
    RewriteCond %{REQUEST_URI} ^secure-page[/]?$
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
    
    # Turn SSL off everything but secure-page
    RewriteCond %{HTTPS} on
    RewriteCond %{REQUEST_URI} !^secure-page[/]?$
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
    
    # BEGIN WordPress
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    

    结果如下:

    1. 任何www和非www和http网址都会重定向到非www和http - >行
    2. 任何www和非www和https网址(不包括安全网页)都会重定向到非www和http - >行
    3. 安全页面网址被重定向到网站根目录,我无法找出原因 - >不行。
    4. 有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:2)

RewriteEngine On
# Redirect from www to non-www
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/secure-page[/]?$
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]


RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/secure-page[/]?$
RewriteRule ^(.*)$  http://example.com/$1 [L,R=301]



# Turn SSL on for secure-page
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/secure-page[/]?$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Turn SSL off everything but secure-page
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/secure-page[/]?$
RewriteRule ^(.*)$  http://%{HTTP_HOST}/$1 [R=301,L]

我已经更新了我的答案!