在做laravel專案的時候,想要將不同的laravel專案切成不同的url,目前已經申請了固定IP
並且跟網路中文買了ip對應的DNS服務。
在一個固定ip的情況下,可以一個固定IP,藉由/後的不同的網址目錄
對應同一台電腦下的不同資料夾嗎?*
PS:不是多個域名,對應一個電腦底下不同資料夾專案。
舉例 www.exname.tw 會指到我的固定IP,並使用apache對外設定了一個基本目錄 c:/website/www
Apache原設定:
ServerRoot "c:/Apache24"
ServerName localhost
Listen 80
<Directory />
Order Allow,Deny
Allow from all
</Directory>
DocumentRoot "c:/website/www"
<Directory "c:/website/www">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
原本都在這個資料夾底下使用不同的資料夾再用網址進入
EX:
c:/website/www/a/public
c:/website/www/b/public
在網址打入不同的
以上情況用 www.exname.tw 去進入不同專案的網址都是可以的。
EX:
www.exname.tw/a/public
www.exname.tw/b/public
-----------------------------分隔線------------------------
現在想要藉由用apache來切分站點,上網爬了相關文章有點疑惑
ServerName後面可以用/ 再切分不同的網址嗎?
<VirtualHost *:80>
ServerName www.exname.tw/a
# 設定該網站的別名,即通過以下域名也能夠訪問
ServerAlias "www.exname.tw/a"
DocumentRoot "c:/website/www/a/public"
# 屬性須要和DocumentRoot一致
<Directory "c:/website/www/a/public">
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName www.exname.tw/b
# 設定該網站的別名,即通過以下域名也能夠訪問
ServerAlias "www.exname.tw/b"
DocumentRoot "c:/website/www/b/public"
# 屬性須要和DocumentRoot一致
<Directory "c:/website/www/b/public">
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
看了這篇說明的設定,有點疑惑:http://blog.xuite.net/tolarku/blog/485166953-Apache+Virtual+Host+%E5%A4%9A%E7%B6%B2%E5%9F%9F%E7%B6%B2%E7%AB%99%E6%94%BE%E7%BD%AE%E5%9C%A8%E5%90%8C%E4%B8%80%E5%8F%B0%E4%B8%BB%E6%A9%9F%E4%B8%8A
第一個問題:
在網址列輸入www.exname.tw/a 或者 www.exname.tw/b
都會顯示404錯誤,
但如果在網址列輸入www.exname.tw/a/public
從最底層的路徑進去是可以的,ServerName可以設定/後的目錄網址指向的位置嗎?
還是設定部分有什麼地方理解錯誤呢?
第二個問題:
現在輸入localhost ,不會進入最基本的目錄夾
會直接導向第一個設定的www.exname.tw/a 網站。
再麻煩大家幫忙解惑一下
Server name 只能用 FQDN, 後面不能帶其他的 URI.
所以你的
ServerName "www.exname.tw/a"
或
ServerName "www.exname.tw/b"
必須改成:
ServerName "wwwa.exname.tw"
或
ServerName "wwwb.exname.tw"
然後 ServerAlias 都拿掉...
這樣 http://wwwa.exname.tw 和 http://wwwb.exname.tw 就可以分別執行不同目錄的程式
如果你想要的是:
www.exname.tw/a/public
www.exname.tw/b/public
這樣的話, 那就不需要用 Virtual host 指令 (因為你的 host name 都是 www.exname.tw, 沒有改變), 而是要用 .htaccess 的 Rewrite Rule 去解析後面的 a/b 字串之後, 才能導向到指定的目錄去.
抱歉我有點不是很理解,我在買網路中文服務的時候,有購買域名,並使用DNS代管服務,將網址指向固定IP,類似59.127.xxx.xxx 指向域名 "exname.tw " 。
使用這兩種方式的情況下
我現在依照您的說法將
ServerName wwwa.exname.tw
ServerAlias "wwwa.exname.tw"
但在網址上打入wwwa.exname.tw 是無法正常顯示的的,
是不是應該要將ServerName指向我的固定IP?
<VirtualHost *:80>
ServerName wwwa.exname.tw
# 設定該網站的別名,即通過以下域名也能夠訪問
ServerAlias "wwwa.exname.tw"
DocumentRoot "C:/website/www/laravel55/shop55/public"
# 屬性須要和DocumentRoot一致
<Directory "C:/website/www/laravel55/shop55/public">
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
wwwa 也要在 DNS 裡面佔一個 A record 的 IP,
wwwb 也要在 DNS 裡面佔一個 A record 的 IP,
所以, 你會需要設定 wwwa 指向 IP 59.127.xxx.xxx, 同時 wwwb 也指向 IP 59.127.xxx.xxx, 因為這兩個都是指向同一台伺服器.
若你沒有在 DNS 內設定 wwwa 和 wwwb 的話, 外界是查不到他們跟 IP 之間的關聯...這是 DNS 沒設定好, 不是你的 apache conf 問題.
我剛剛試了一下設定這樣的子的情況下,
www.exname.tw/shop55 可以訪問到正確的首頁
但是如果是下層的目錄環境 www.exname.tw/shop55/login
就會顯示路徑錯誤?
Alias /shop55 "C:/website/www/laravel55/shop55/public"
<Directory "C:/website/www/laravel55/shop55/public">
Options All
AllowOverride All
Require all granted
Alias /white55 "C:/website/www/laravel55/white55/public"
<Directory "C:/website/www/laravel55/white55/public">
Options All
AllowOverride All
Require all granted
http://phorum.study-area.org/index.php?topic=21235.0
上網爬了一下相關的說明,有點疑惑
如果照上面的設定方式,應該是/shop55 後面在接的參數會導向對應的route?
像是/shop55 是導向我的public首頁。
如果想要進去登入頁面shop55/這邊不同的param
應該不用再設定Alias?
舉例 /shop55/login 應該會等於
原本網址的 www.exname.tw/shop55/login ?
但實際測試發現只有設定/shop55 可以導向首頁。
後面shop55/不同參數頁面 都會顯示找不到網頁
研究了許久,找到了對應的解決方案。
首先我在httpd.conf設定
Alias /shop55 "C:/website/www/laravel55/shop55/public"
<Directory "C:/website/www/laravel55/shop55/public">
</Directory>
Alias /white55 "C:/website/www/laravel55/white55/public"
<Directory "C:/website/www/laravel55/white55/public">
</Directory>
在對應的public底下使用了.htaccess檔案 並寫入RewriteBase /Alias name
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /white55
</IfModule>
感謝大家的幫忙謝謝。