2 回答

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^$ http://example.com/index.php [L,R=301]
是的,這是一個(gè)外部重定向,從 重定向http(s)://example.com/到http://example.com/index.php。但是,您正在重定向到 HTTP,而不是 HTTPS,并且您正在重定向到index.php,而您index.html在問題中已說(shuō)明。似乎不需要檢查請(qǐng)求的主機(jī)名,除非您有多個(gè)域并且特別只想重定向一個(gè)實(shí)例。
除非您計(jì)劃實(shí)施 HSTS,否則請(qǐng)?jiān)谀某R?guī) HTTP 到 HTTPS 重定向之前包含此重定向,并在您的 HTTP 到 HTTPS 重定向中包含規(guī)范主機(jī)名。
例如:
RewriteEngine On
# Redirect / or /index.html TO /dir/index.html (HTTPS)
RewriteRule ^(index\.html)?$ https://example.com/dir/index.html [R=302,L]
# Redirect HTTP to HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://example.com%{REQUEST_URI} [R=302,L]
但是,在閱讀您的鏈接問題后,外部“重定向”可能不是您問題的正確解決方案。當(dāng)您應(yīng)該鏈接到子目錄中的文件時(shí),聽起來(lái)您可能“錯(cuò)誤地”鏈接到文檔根目錄中的文件?(真的,如果是這種情況,您應(yīng)該更正您的內(nèi)部鏈接……)但是,一個(gè)可行的解決方案可能是在內(nèi)部將請(qǐng)求重寫為所需的 URL 路徑,或者DirectoryIndex如果您鏈接到文檔根目錄,則更改 。這對(duì)用戶/客戶端是完全隱藏的——用戶只能看到 URL A,但實(shí)際上您在提供 URL B。但這取決于您網(wǎng)站的結(jié)構(gòu)。
另一方面,外部重定向?qū)嶋H上將用戶/瀏覽器發(fā)送到 URL B。他們同時(shí)看到 URL A(他們點(diǎn)擊的鏈接)和 URL B(他們被重定向到的 URL)——就像搜索引擎機(jī)器人一樣. 瀏覽器需要發(fā)出兩個(gè)請(qǐng)求。這對(duì)用戶來(lái)說(shuō)可能會(huì)更慢,并且會(huì)在您的服務(wù)器上進(jìn)行更多工作(不多,但仍然更多)。

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
你想先做你的 http --> https 因?yàn)檫@同時(shí)適用于原始和重定向以進(jìn)行安全通信。
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] Header always set Content-Security-Policy "upgrade-insecure-requests;"
現(xiàn)在您可以將重定向應(yīng)用到index.php
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} -d RewriteRule . /index.php [L] </IfModule>
您可以調(diào)整-f
和-d
包含!
和/或更改文件名類型以滿足您的特定需求。
添加回答
舉報(bào)