2017-06-23 86 views
1

當訪問URL www.domain.com/test.php,既$_SERVER['SERVER_NAME']$_SERVER['HTTP_HOST']輸出域名而不萬維網。前綴:domain.com

爲什麼會這樣?

編輯:如上所述here,$_SERVER['SERVER_NAME']可能與實際請求的URL不同,但$_SERVER['HTTP_HOST']應返回域。

PHP版本:7.1 Apache的版本:2.2

的.htaccess內容如下(最有趣的部分是頂部重寫塊)

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L] 
</IfModule> 

# BEGIN Force SSL for SAKURA 
# RewriteしてもHTTPS環境変數を有効にする 
SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1 


# 常時HTTPS化(HTTPSが無効な場合リダイレクト) 
<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{ENV:HTTPS} !on 
RewriteCond %{REQUEST_URI} !/wp-cron\.php$ 
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 
# END Force SSL for SAKURA 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

這裏是test.php的內容:

<?php 
echo $_SERVER['SERVER_NAME']; 

echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 

輸出是「domain.com」和「domain.com/test」。

+0

可能重複[PHP:$ \ _ SERVER變量:$ \ _ SERVER \ ['HTTP \ _HOST'\] vs $ \ _ SERVER \ ['SERVER \ _NAME'\]](https://stackoverflow.com/questions/13772934/php-server-variables-serverhttp-host-vs-serverserver-name) –

+0

@Obsidian Age這個線程在上面的問題中可能是「可能重複的」? – voodoo417

+0

@Obsidian感謝您的建議,但這個問題涉及到爲什麼這兩個變量不同,我的問題是爲什麼我的URL不同於這些變量(至少HTTP_HOST應該是我所知道的相同) – TheTrueTDF

回答

0

那麼你提到的最有趣的重寫塊是從URL中刪除www.與301重定向。因此,沒有辦法通過www.將請求發送到您的PHP腳本,因爲包括www.在內的任何請求都會發出301重定向,並且永遠不會到達PHP腳本。瀏覽器然後重新發布基於301重定向的請求,現在它會到達沒有www.的腳本。

您可以通過註釋掉頂部的塊,清除瀏覽器緩存(重要的 - 或使用不同的瀏覽器)並再次訪問測試頁來測試。

+0

感謝您的回答, 事情是,我們實際上希望這種重定向工作,但現在,當我們將www.domain.com稱爲www.domain.com時,它仍停留在www.domain.com。由於我沒有找到任何方法使這個重定向工作,我想我可以在PHP中編寫重定向,但我無法檢測到請求的URL是否以www開頭或不是(因爲$ _SERVER ['HTTP_HOST']值是「domain.com」)。我希望這更清楚。 編輯:htaccess重定向做爲http工作,但不是https – TheTrueTDF

相關問題