2017-08-26 68 views
0

我有一個項目,其文件夾結構是這樣的:如何在Apache httpd.conf中配置僞裝不同文件夾中的不同主頁文件,就好像它們位於不同文件夾中一樣?

/www 
    /img 
    /css 
    /js 
    /templates 
    index1.html 
    index2.html 
    index3.html 

正如上述,我有三個網頁文件。因爲他們有很多共同的部分,他們在一個項目文件夾。所以實際上,它們屬於一個項目。但我希望人們訪問這個網站與這樣的網址:

http://www.servername.com/project1/ 
http://www.servername.com/project2/ 
http://www.servername.com/project3/ 

好像他們是三個不同的項目。因爲我不想讓人們知道這只是一個項目。我希望它們看起來像三個不同的項目,並且這三個主頁文件具有相同的名稱(index.html)。

所以我必須在httpd.conf文件中配置虛擬目錄。我放三個<IfModule dir_module>節點在httpd.conf文件,但似乎不起作用:

<IfModule dir_module> 
    DirectoryIndex index1.html 

    Alias /project1/ "E:/www/" 
    <Directory "E:/www/"> 
     ...... 
    </Directory> 
</IfModule> 

<IfModule dir_module> 
    DirectoryIndex index2.html 

    Alias /project2/ "E:/www/" 
    <Directory "E:/www/"> 
     ...... 
    </Directory> 
</IfModule> 

<IfModule dir_module> 
    DirectoryIndex index3.html 

    Alias /project3/ "E:/www/" 
    <Directory "E:/www/"> 
     ...... 
    </Directory> 
</IfModule> 

那我該怎麼做才能達到這個目的呢?

+0

謝謝!但我無法修改主機名,它是固定的。我只能修改URL的目錄部分。 – Benson

+0

不是在談論系統主機名,而是在您的http服務器配置中的虛擬主機名稱。由於您可以訪問該配置,因此您可以隨意定義這些配置。除此之外,唯一需要的是A記錄的「通配DNS解析」。 – arkascha

回答

1

最佳可能是配置單獨的主機名,其實,這樣project1.example.comproject2.example.com等上。您可以將這些配置爲您的http服務器配置中的虛擬主機。除此之外,唯一需要的是A記錄的「通配DNS解析」。

但是,如果您確實想使用路徑進行分離,那麼最簡單的方法是在文件系統中使用符號鏈接,這樣可以爲這些文件系統分別配置。由於它看起來像是在MS-Windows上,所以您沒有這個選項,但該系統不提供這種功能。因此,您必須嘗試解決...

由於每個文件夾只能有一個DirectoryIndex指令,因此您的方法無效。但是由於你的「項目」顯然只包含一個靜態HTML文件,爲什麼不簡單地相應地更改Alias指令呢?

Alias /project1 "E:/www/index1.html" 
Alias /project2 "E:/www/index2.html" 
Alias /project3 "E:/www/index3.html" 
DocumentRoot "E:/www" 
<Directory "E:/www/"> 
    # Whatever options you need for the common folder 
</Directory> 

另一種方法是使用 「內部重寫」。顯然,你需要重寫模塊(mod_rewrite)來加載並激活它。然後,你可以做這樣的事情:

RewriteEngine on 
RewriteRule ^/?project1 /index1.html [END] 
RewriteRule ^/?project2 /index2.html [END] 
RewriteRule ^/?project3 /index3.html [END] 
DocumentRoot "E:/www" 
<Directory "E:/www/"> 
    # Whatever options you need for the common folder 
</Directory> 

可能鉛與裝載資產如CSS文件之類的問題。這取決於您網站內部參考的結構。

注意:如果您遇到http狀態500(「內部服務器錯誤」),請查閱您的http服務器錯誤日誌文件以查找特定問題。有可能你運行的是一個非常舊的Apache服務器版本,並且[END]標誌不可用。在這種情況下,請嘗試使用[L]標誌。

重寫模塊比別名模塊提供更多的靈活性,但它也增加了複雜性。

+0

非常感謝!但是我嘗試了你的建議,並且我在瀏覽器中得到了這樣的迴應:'找不到。在這個服務器上找不到請求的URL/project1.'似乎Apache'httpd.conf'不允許將'Alias'設置爲某個文件。因爲我嘗試將文件名更改爲路徑,所以它可以工作,但不能用於文件名。 – Benson

+0

我的錯,很抱歉。我改變了答案,並刪除了'Alias'指令中的尾部斜線,我一味地從您那裏複製:-) – arkascha

+1

我剛剛再次檢查,只是爲了確定___是肯定的,是的,這是可能的。另一種方法是內部重寫,但在'Alias'方法之上要容易得多。 – arkascha

1

mod_alias中

https://httpd.apache.org/docs/2.4/mod/mod_alias.html

你可以用它與重寫和LocationMatch指令結合來實現的事情所有的孩子。 不管之前你讓我覺得你所說的「僞裝」真的只需要閱讀的.htaccess手冊:

https://httpd.apache.org/docs/current/howto/htaccess.html

+1

非常感謝!是的,你說得對,我不熟悉Apache(對不起)。我剛開始深入瞭解它。我會按照你的建議閱讀你上面發佈的文檔。 – Benson

相關問題