2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
我發(fā)現(xiàn)這個(gè)有效:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L] #if not already index.php
RewriteCond %{REQUEST_FILENAME} !-f #only if NOT a FILE (directory / non-existent file)
RewriteRule . /index.php [L] #redirect to index.php
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*) https://www.example.com/%{REQUEST_FILENAME} [R=301,L] #redirect to https://www
</IfModule>
這不可能像所寫的那樣“工作”,因?yàn)榇嬖谠S多錯(cuò)誤:
您缺少打開
<IfModule mod_rewrite.c>
指令。然而,無論如何,這個(gè)<IfModule>
包裝都不是必需的,應(yīng)該被刪除。Apache 不支持行結(jié)束注釋。具體來說,以下行將由于“錯(cuò)誤的標(biāo)志分隔符”而導(dǎo)致 500 錯(cuò)誤:
RewriteCond %{REQUEST_FILENAME} !-f #only if NOT a FILE (directory / non-existent file)
(更新:如果您在此處沒有看到 500 錯(cuò)誤響應(yīng),則您可能使用的是 LiteSpeed 服務(wù)器;而不是 Apache?在 LiteSpeed 上,此行尾注釋似乎按預(yù)期工作?。?/p>
www
除了對(duì)目錄(包括根目錄)或真實(shí)文件(除了index.php
)的請(qǐng)求之外,重定向到的外部重定向(最后)永遠(yuǎn)不會(huì)被處理。在現(xiàn)有重寫之前,需要先進(jìn)行此重定向。然而,請(qǐng)看下一點(diǎn)......您在目標(biāo) URL 中錯(cuò)誤地使用了
REQUEST_FILENAME
(絕對(duì)文件系統(tǒng)路徑) - 這將導(dǎo)致格式錯(cuò)誤的重定向。您可以使用REQUEST_URI
服務(wù)器變量(完整的 URL 路徑),但請(qǐng)注意,您還存在雙斜杠問題。因此,它需要像下面這樣重寫:RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
小要點(diǎn):
RewriteBase
這里沒有使用它,可以安全地刪除。(除非你有其他指令使用這個(gè)?)
概括
綜合以上幾點(diǎn)我們有:
RewriteEngine On
# Redirect to https://www
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Stop here if already index.php
RewriteRule ^index\.php$ - [L]
# Only if NOT a FILE (non-existent file)
RewriteCond %{REQUEST_FILENAME} !-f
# Rewrite to index.php (in the document root)
RewriteRule . /index.php [L]
請(qǐng)注意,這仍然會(huì)將目錄重寫為,與您的評(píng)論/index.php所述相反。
首先使用 302(臨時(shí))重定向進(jìn)行測(cè)試以避免潛在的緩存問題。
在測(cè)試之前您需要清除瀏覽器緩存。

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
經(jīng)過大量的修改/研究,我發(fā)現(xiàn)這個(gè)有效:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L] #if not already index.php
RewriteCond %{REQUEST_FILENAME} !-f #only if NOT a FILE (directory / non-existent file)
RewriteRule . /index.php [L] #redirect to index.php
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*) https://www.example.com/%{REQUEST_FILENAME} [R=301,L] #redirect to https://www
</IfModule>
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
- 2 回答
- 0 關(guān)注
- 128 瀏覽
添加回答
舉報(bào)