簡體   English   中英

服務器IP無法用於站點測試

[英]server ip not working for site test

我最近剛從Godaddy購買了Linux托管服務器。 我不知道我是否搞砸了,或者我只是個菜鳥,我似乎無法使用IP XXX.XX.XX.XX測試網站。 經過研究后我發現可以使用XXX.XX.XX.XX/~rootuser/

而且由於我試圖從同一服務器運行多個站點,所以所有站點都根據目錄分開。

XXX.XX.XX.XX/~rootuser/site加載一個站點。

我的PHP中的所有鏈接都使用$_SERVER['SERVER_NAME']的常量值作為url。 但是,所有鏈接也都在開發工具中顯示為XXX.XX.XX.XX/script.js

我雖然要使用Apache,但是找不到有用的主題。 我也嘗試使用主機文件,但失敗了。

我真的很菜鳥,也很聰明。 真的很抱歉使用錯誤的術語。

有沒有一種方法可以測試使用ip的站點,而無需在ip后使用/~rootuser/或讓php獲取XXX.XX.XX.XX/~rootuser/site作為服務器名稱。

編輯

即使我刪除hello.html http://prntscr.com/89wx25,使用IP始終顯示此信息

如果您擁有vps或專用服務器,則只能使用ip,因為它們只有專用於您的主機的ip。

如果您在IP上購買了共享托管,則托管了很多網站,因此您無法做自己想做的事情。

我會盡力回答您的兩個問題...

a)“有沒有一種方法可以在不使用IP的情況下使用ip測試站點而不使用/〜rootuser /?”

當然,您可以獨立於GoDaddy。 服務器(例如Apache)必須配置為該IP地址的網站。 但是,從邏輯上講,每個IP不能為一個以上的網站提供服務。 這不切實際,這就是您要使用映射到該IP的多個名稱的原因之一。

對於GoDaddy,這完全取決於您“購買”了哪種軟件包以及它允許​​您做什么。 如果您有專用IP,也許可以要求它為該IP服務於特定的網站,但是您有可能購買了共享托管計划,因此同一IP用於多個用戶/客戶端/站點。 因此,他們不會將該IP默認為您的網站。 因此,我建議您在實踐中使用名稱。 該名稱通常是您注冊的域名,例如EXAMPLE.COM。

從技術上講,如果您可以控制計算機配置(機會不在GoDaddy上,特別是如果您購買了共享托管計划),您甚至可以告訴計算機以“ anynameyouchoose”和本地方式(即,您自己)為網站提供服務計算機),則可以確保將“ anynameyouchoose”映射到目標主機IPXXX.XX.XX.XX。 在Linux和Windows中,有一個hosts文件,您可以在其中指定名稱和IP之間的映射。 您甚至可以決定是否將Microsoft.com解析為XXX.XX.XX.XX,並且如果將位於XXX.XX.XX.XX的計算機配置為可以為Microsoft.com提供特定的內容,那么它將!

實際上,有一些公共名稱服務器將Microsoft.com之類的域名映射到注冊IP,但是最好知道它是如何工作的,當您想在4月1日愚弄朋友時,它可能會派上用場。 ;-)

這有點先進,但是如果您理解我的意思,您也可以嘗試將主機控制面板中的任何虛構域名與您的網站內容相關聯,然后將該名稱映射到您網站所在計算機的IP 。 它可能會起作用,但是這完全取決於GoDaddy或您將使用的任何主機允許您執行的操作。

我認為GoDaddy當前在您的托管計划中提供了免費的域名注冊,或者您至少可以購買一個(我敢肯定您打算無論如何都購買一個或多個)。 一些主機(對於GoDaddy不知道)還為用戶提供了一些通用子域(your-site-name.godaddy.com-GoDaddy.com可以是主機用作其用戶基礎域的任何內容)。 這也可以為您提供根主機名,而無需處理深層的根路徑。

如果您有多個站點,則也只能購買一個域名並創建很多子域以映射到每個站點。 就像您購買EXAMPLE.COM一樣,然后可以創建SITE1.EXAMPLE.COM,SITE2.EXAMPLE.COM等。

如果您絕對想避免在代碼中處理可變的根路徑,那么就是所有這些。

b)“ [...]或讓php獲取XXX.XX.XX.XX /〜rootuser / site作為服務器名稱[?]”

如果要執行此操作,則可能需要在PHP中設置一些配置變量以保存主機(IP或名稱)和根路徑(例如/〜rootuser / site)。 因此,即使您在具有不同約束的多個主機上運行站點,也限制了必須更改為配置變量的代碼量。 您可以嘗試覆蓋$ _SERVER ['SERVER_NAME']值,但我建議您不要這樣做,因為這不是此特殊變量的目的,並且會在以后產生更多問題。

URL的其他部分會根據主機(例如協議(http或https)和端口號)而改變。 如果發現必須在代碼中重復太多,請創建自己可以重復使用的變量或函數。

如果要自動管理,則需要查看$ _SERVER super global的以下索引:

  • HTTP_HOST :這將為您提供在瀏覽器地址欄中鍵入的主機IP或名稱。
  • REQUEST_URI :這將為您提供HOSTNAME之后的所有內容(路徑+查詢字符串)

因此,對於地址http://www.example.com/~root/site1/sub-directory/page?var1=abc&var2=def ,值將為:

  • $ _SERVER ['HTTP_HOST'] => www.example.com
  • $ _SERVER ['REQUEST_URI'] => /〜root / site1 /子目錄/頁面?var1 = abc&var2 = def

您可以在此處了解有關$ _SERVER通常可用的內容的信息: http : //php.net/reserved.variables.server

請注意,$ _ SERVER中的某些變量可能僅適用於某些服務器(Apache,IIS等),但是暫時不必為此擔心。 大多數人傾向於將Apache與PHP一起使用,並且您將要使用的公共服務器變量應該在所有流行的服務器中都可用。

當然,如果在我的示例中使用子目錄,將無法輕松找出“根路徑”是什么(即/〜root / site1)。 因此,除了為每個設置手動配置外,您別無選擇。

我也鼓勵您利用phpinfo()函數。 使用以下代碼創建一個名為info.php的頁面:

<?php
phpinfo();

當您訪問該頁面時,您將看到$ _SERVER中可用的所有內容,以及許多其他有用的信息。 例如,如果您訪問http://hostname/the/path/to/info.php?var1 = abc&var2 = def-您將看到查詢字符串“ var1 = abc&var2 = def”包含在哪些變量中。

您可能想要創建一個默認配置文件(config.php),該文件中可以選擇包含一個文件,該文件用於在需要時“覆蓋”默認值(config.env.php):

config.php可以是:

<?php
$config['host'] = $_SERVER['HTTP_HOST'];
$config['path'] = '/';

if (file_exists('config.env.php')) {
    require('config.env.php');
}
?>

GoDaddy帳戶上的config.env.php可以是:

<?php
$config['path'] = '/rootuser/site1';
?>

這個config.env.php文件將是您從同一站點的多個設置更改而來的文件。 例如,您可以在本地擁有“開發”版本,在線具有“測試” /“登台”版本以及在線具有“生產”版本。 這些環境中的每一個都可以具有自己的特定配置。

然后,您將希望在所有頁面中包含config.php,以便可以使用配置變量。

另外,您可以在頁面中構建所有內部鏈接(同一站點內的鏈接),而無需指定協議,主機和端口。 因此,這些鏈接將“相對於主機”。 因此,如果您鏈​​接到“ /〜rootuser / site / sub-directory / page-name”,則無需指定“ http:// host:port ”,它將使用實際的名稱。 為什么在不需要時重復自己,添加更多字符等? ;-)

我還建議您對所有內部鏈接始終使用絕對路徑(即以/開頭),而不要嘗試放置相對路徑。 例如,使用“ / section-x / sub-y / page-z”,而不要使用位於“ http:// host / section-x / index ”)的頁面中的“ sub-y / page-z”。 除非您有充分的理由並且知道自己的工作,否則通常可以減輕管理上的麻煩。

當然,如果您可以消除在所有環境中都具有可變的根路徑的需求,那么這將簡化您的代碼庫。

我還要提及的是,存在一個HTML標記,可讓您定義網頁中所有鏈接的基本路徑。 但是,您將必須正確理解其工作方式。 如果您對此感到好奇,建議您去檢查一下: 是否建議使用<base> html標記? -我不建議您這樣做,但是很高興知道它的存在。

如果尚未完成,您還應該設置一個本地開發環境(WAMP或LAMP軟件包可以幫助您快速入門 ;如果您使用Windows,請尋找WampServer )。

我希望這一點很清楚,希望這會使您對整個事情有所了解。 否則,請隨時提出問題,以便我改善答案。

由於許多域名可以指向相同的IP地址(從字面上看,幾乎無限數量的域都可以指向同一IP),因此Apache和其他Web服務器具有配置以查找名稱並找到正確的位置進行顯示網站。

在Apache中,這是一個稱為“ VirtualHost”塊的配置。 這是我自己托管的網站的簡化/示例。

<VirtualHost *:80>
    # we don't list a specific IP here - so it would accept a connection
    # from any the machine has. The ServerName is the important part here.
    ServerAdmin webmaster@example.net
    ServerName portal.example.net
    # If this was the only VirtualHost set, or it was setup first in the
    # configuration, it would catch all websites on this IP, unless
    # another Vhost was defined for a name. Ordering is important though.

    DocumentRoot /var/www/sites/portal.net/html/
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/portal.error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/portal.access.log combined

</VirtualHost>

在此示例中,我轉到名稱指向的IP地址上的網站URL: portal.example.net (不是真實的網站,僅是示例),網絡服務器會看到瀏覽器給出的名稱-它位於Host:標題,然后從配置中查找該塊,然后轉到光盤上的正確位置-在此處/var/www/sites/portal.me/html/顯示該站點。

如果您在一台機器上運行多個網站,則在Apache,Nginx或您想看到的任何網站中都需要類似的東西。 如果您僅運行一個網站,則可以將所有內容都默認為指向同一位置-但是有充分的理由以更好的方式進行操作。

Apache VirtualHost文件必須位於主要的Apache配置中-它們通常位於名為/etc/apache/site-enabled/200-websitename.conf文件中。 這些數字有助於在目錄中專門排序文件。 還有一個目錄/etc/apache/site-available/ ,如果可以偶爾禁用站點,則可以在其中放置文件,然后將其-enabled鏈接到-enabled目錄。

暫無
暫無

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

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