2013-03-05 124 views
1

我重定向與我的.htaccess文件下面的代碼的應用程序,該頁面是應該做以下內容:從WWW重定向到非www網址的.htaccess

  1. 以.html取代PHP擴展
  2. 從HTTP重定向到https
  3. 重定向從WWW到非www網址

擴展的.html工作正常,它是由HTTP重定向到HTTPS,但問題是從WWW重定向到非-w WWW,它在主URL上正常工作,但是當有文件引用時,它不起作用。

說當我寫www.ntestechnologies.com我得到我的慾望網址是https://ntestechnologies.com,但是當我寫www.ntestechnologies.com/index.html我得到這個https://www.ntestechnologies.com/index.html我不需要www在這個網址以及請指導我,這裏是代碼在htaccess文件:

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\.ntestechnologies\.com$ 
RewriteRule ^/?$ "https\:\/\/ntestechnologies\.com\/$1" [R=301,L] 

RewriteRule ^(.*)\.html$ $1.php [nc] 
+0

如果你想重寫所有* www。* url爲什麼不寫* RewriteRule(。*)**而不是* RewriteRule^/?$ *?您甚至沒有在替代網址中使用反向引用($ 1),因爲您沒有捕獲任何結果。 – kjetilh 2013-03-05 07:36:28

+0

我還建議您將以下條件添加到您的HTTPS檢查(或完全替換),因爲我看到*%{HTTPS} *變量不穩定。 ** RewriteCond%{SERVER_PORT}!^ 443 $ [OR] **。 OR標誌意味着如果兩個條件都爲真(不使用https),那麼重寫 – kjetilh 2013-03-05 07:53:03

+0

這段代碼是複製粘貼的,我不是.htacess和apache的專家,請你詳細解釋一下。 – 2013-03-05 08:25:53

回答

1

您只需要一個RewriteEngine On

您不能在RewriteRule中使用HTTP_HOSTREQUEST_URI。如果您需要捕獲這些值,則必須在RewriteCond

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)(.+) 
RewriteRule .* https://%1/$0 [R,L] 

RewriteCond %{HTTP_HOST} ^www\.(.+) 
RewriteRule .* https://%1/$0 [R,L] 

這消除了領先www,如果存在這樣做。同時,它重定向到HTTPS。

+0

腳本在任何瀏覽器上首次爲我工作,但如果您在同一瀏覽器上第二次嘗試,它只會重定向到https,但不會刪除www。 – 2013-03-05 10:12:59

+0

在這裏,您將兩個操作http - > https和www拼接到 - >非www。我懷疑這是他需要的。 – kjetilh 2013-03-05 11:18:17

+0

@MIrfan對我來說,它可以工作任何次數。我忘記了,當https已經啓用時,將覆蓋這種情況。我添加了所需的附加規則。 – 2013-03-05 14:01:08

0
RewriteEngine On 

# Redirects from HTTP to HTTPS. We use %{SERVER_PORT} as it's more reliable than %{HTTPS} 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

# Redirects www.example.com/... to example.com/... 
RewriteCond %{HTTP_HOST} ^www\.(.+) 
RewriteRule .* https://%1%{REQUEST_URI} [R,L] 

RewriteRule ^(.*)\.html$ $1.php [nc] 
相關問題