簡體   English   中英

$ _SERVER ['SERVER_NAME']和$ _SERVER ['HTTP_HOST']都與實際網址不同

[英]$_SERVER['SERVER_NAME'] and $_SERVER['HTTP_HOST'] both different than actual URL

當訪問URL www.domain.com/test.php時$_SERVER['SERVER_NAME']$_SERVER['HTTP_HOST']輸出沒有www的域名 前綴: domain.com

為什么會這樣?

編輯:作為陳述這里$_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”。

那么你提到的頂級有趣的重寫塊就是刪除www. 來自具有301重定向的URL。 因此,無法通過www.訪問您的PHP腳本www. 完整,因為任何請求包括www. 發出301重定向,永遠不會訪問PHP腳本。 然后,瀏覽器根據301重定向重新發出請求,現在它將在沒有www.情況下進入您的腳本www.

您可以通過注釋掉頂部塊,清除瀏覽器緩存(重要 - 或使用其他瀏覽器)並再次訪問測試頁來對此進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM