您在這裡

Apache上簡潔網址的設定

Jinuske's 的頭像
Jinuske 在 2006-09-20 (三) 23:33 發表

小弟在 Linux(CentOS4)上架設網站,對於簡潔網址這樣的功能總是一知半解,最近安裝 Drupal 後又研究了好幾天,終於可以運作正常,但卻還是對我的設定方式不太有把握,所以在此分享一下,雖然可能與 Apache 的設定關連性多些,還請見諒,也務必請前輩們指點一下:

<環境>
1.標準的 Linux+Apache+MySQL+PHP,原則上都是 CentOS 4 標準提供的版本。
2.由於必須在同一個 ip 上支援多個正式網域名稱的網站,所以採用 name-based 的虛擬主機方式(DNS中已設定對應)。
3.不同的網址分別對應不同的實體目錄,安裝的管理系統也不同,有 Drupal, textpattern。

<另一個困擾我的前提>
根據 Apache 2 Server Bible 一書摸索時看到這樣一段話:
如果單目錄要開啟URL重編寫功能,可能造成Apache伺服器執行效能降低。這是因為 mod_rewrite模組支援單目錄的重編寫法則引用了某種附註,這種附註使得伺服器的負荷加重了。因此,單目錄最好不要開放URL重編寫。

<所以...目前的做法是>
在 httpd.conf 中這樣設定:

##在最前面的全域環境中就寫入
RewriteEngine On
##設定虛擬主機所對應的目錄

Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all

##設定 name-based 虛擬主機
NameVirtualHost *:80

ServerName www.site01.com
ServerAdmin webmaster@site01.com
DocumentRoot "/var/www/site01"
ErrorLog logs/www.site01.com-error_log
CustomLog logs/www.site01.com-access_log common


其他的 site02、site03 也都是相同的設定;然後就只是沿用像 Drupal, textpattern 預設提供的 .htaccess 檔案,都沒有任何修改。
最後再分別到後台去啟用簡潔網址的運作,就這樣,看起來都很正常。

我的疑問是:
1. 上面這樣的做法是正確的嗎?還是有更正統或正確的做法?
2. 那個"單目錄附註加重負荷" 的說法,這樣的設定有避免掉了嗎?還是其實沒有差別?

請各位先進幫忙看看,不吝指點一下...

你的多網域名是自己內部使用或作為服務提供給客戶???
如果只是內部使用,e.g.公司內不同的網域
account.mydomain.com
interest.mydomain.com

可以根據drupal multi-site文檔怎樣設置就可以
/drupal/sites/account.mydomain.com
/drupal/sites/interest.mydomain.com

Jinuske,
依據我的經驗,基本上你這樣設置應該是沒什麼問題,關於單目錄的效率問題,我用我的理解說明一下。
Apache的.htaccess可以在根目錄,或是子目錄裡設置
例如:

www/.htaccess
www/files/.htaccess

都會有作用,因此如果RewriteEngine On沒有開成全域的話,可以分別在各個virtual host底下的.htaccess來開啟。

單目錄沒效率的問題,其實不是指virtual host的狀況,而是指同一個根目錄,不同的子目錄底下分別設置不同的Rewrite Rule

www/.htaccess
www/files/.htaccess

設定了不同的Rewrite Rule,會非常沒效率...要就設定在www/.htaccess裡頭就好了。試想每一個連線,每一個點閱,都要掃一次.htaccess,然後重新定義Rewrite Rule...然後進入到子目錄又有不同的定義,這是一件恐怖消耗效率的事情。

順帶一提,Apache RewriteEngine本身就不是一個很有效率的方式,但因為又方便又好用因為,又比用php+mysql來實現來得更有效率,卻又是非他不可的一種方式。另一方面,有些防堵spam的時候會用到RewriteEngine來達成也是不得已,這種時刻能不用RewriteEngine就不要用,最有效率的方式還是用firewall來幹這種事。

--
http://jimmy.j2.idv.tw

--
from open mind to open source~

這是我是好久才抓到的問題,ㄧ直沒法啟動網址重寫的朋友可以試試看
系統環境 PHP版本 = 5.0.4 apache2handler
伺服器 = Apache
資料庫 = mysql 4.1.20, lock.system=flock
工具 = ArchiveUpload, Dcraw, Exif, Getid3, Thumbnail, Gd
加速 = none, none
作業系統 = Linux 2.6.11-1.1369_FC4smp #1 SMP

以下為httpd.conf的某段設定

DocumentRoot /var/www/doc

Options FollowSymLinks
AllowOverride None

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# This should be changed to whatever you set DocumentRoot to.
#

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
Options FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

提供我的設定如下

如果你的drupal 是安裝在 /var/www/html/drupal,而且網址為
http://192.168.x.x/drupal(假設網址),設定如下,主要在於
RewriteBase /drupal,後面要加上drupal即可.

=====================================================

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
# Options Indexes FollowSymLinks
Options FollowSymLinks
RewriteEngine on
RewriteBase /drupal
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

提供我的設定如下

如果你的drupal 是安裝在 /var/www/html/drupal,而且網址為
http://192.168.x.x/drupal(假設網址),設定如下,主要在於
RewriteBase /drupal,後面要加上drupal即可.

=====================================================

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
# Options Indexes FollowSymLinks
Options FollowSymLinks
RewriteEngine on
RewriteBase /drupal
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

提供我的設定如下

如果你的drupal 是安裝在 /var/www/html/drupal,而且網址為
http://192.168.x.x/drupal(假設網址),設定如下,主要在於
RewriteBase /drupal,後面要加上drupal即可.

=====================================================

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs-2.0/mod/core.html#options
# for more information.
#
# Options Indexes FollowSymLinks
Options FollowSymLinks
RewriteEngine on
RewriteBase /drupal
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

小弟對linux環境不熟
當初會使用Plesk的linux虛擬主機
只是因為Windows虛擬主機上沒有mySQL..... ^ ^|||

請問一下限制頗多的Plesk的linux虛擬主機環境內
不能動httpd.conf
不能設 vhost
沒有shell command
如果要建立一套 單一程式碼的 Multi-site 可以怎麼作勒??

我想建立三個站
www.mydomain.com.tw .....mydomain網域已註冊
aaa.mydomain.com.tw
bbb.mydomain.com.tw

目前drupal 安裝在下面環境
/httpdocs/drupal/sites/default/
/httpdocs/drupal/sites/default/default.php
/httpdocs/drupal/sites/default/files/

目前default的drupal站已可以正常使用
只是得打入 http://www.mydomain.com.tw/drupal
現在的問題是
1) 如何設定才能在輸入 http://www.mydomain.com.tw/
能夠自動指向 http://www.mydomain.com.tw/drupal ???

第2,3個multisite
透過Plesk新增的次網域(subdomain)的網頁目錄也由Plesk自動建立好了
/subdomains/aaa/httpdocs/
/subdomains/bbb/httpdocs/
durpal內供次網域使用的子目錄也已手動建立
/httpdocs/drupal/sites/aaa.mydomain.tw/
/httpdocs/drupal/sites/aaa.mydomain.tw/default.php
/httpdocs/drupal/sites/aaa.mydomain.tw/files/
/httpdocs/drupal/sites/bbb.mydomain.tw/
/httpdocs/drupal/sites/bbb.mydomain.tw/default.php
/httpdocs/drupal/sites/bbb.mydomain.tw/files/

試了兩個方法
A) 在 /subdomains/aaa/httpdocs/ 放入ifrme轉指向http://www.mydomain.com.tw/drupal 的 index.html檔
B) 在 /subdomains/aaa/httpdocs/ 放入"redirect permanent / http://mydomain.tw/drupal" 的 .htaccess檔
只能成功地帶出 default 的druple站
並不能啟動第2或3個multisite的drupal安裝程式install.php
請問
2) 如何設定才能在輸入 http://aaa.mydomain.com.tw/http://bbb.mydomain.com.tw/
能夠自動指向 http://www.mydomain.com.tw/drupal
進而啟動drupal的安裝程式 install.php

先謝在前啦!!!

真不行....只好馬上換家虛擬主機商囉!!!

1. 如果你的網站根目錄是 /httpdocs/,為甚麼要把 drupal 放在次目錄裡?

2. 單一程式碼的 Multi-site,必須每個網站的根目錄都在同一個目錄裡,這樣單一程式碼才會起作用,用 iframe 或 redirect 是沒用的。也就是說,www.mydomain.com.tw 、aaa.mydomain.com.tw、bbb.mydomain.com.tw 的網站目錄都必須是同一個,例如 /httpdocs/

謝謝 charlesc

當初沒放在根目錄
是想讓根目錄看起來清爽一點.....小潔癖
後來也只好屈服了
就讓Drupal散在根目錄唄

這第2點說的太好了
也是我這2~3天內連換了3家虛擬主機商
才深刻了解的辛苦歷程 .......................... http://drupaltaiwan.org/comment/reply/679/7757
要是早幾天知道就不用那麼大費周章啦
不過話又說回來.........現在要搬家(換虛擬主機商)倒是很順手............... ^ ^|||