- Alias
- AliasMatch - Regular Expression 版的 Alias
- Redirect
- RedirctMatch - Regular Expression 版的 Redirect
- RedirectPermanent、RedirectTemp、ScriptAlias、ScriptAliasMatch
Alias 處理順序
- Redirect 先於 Alias
- 單看 Alias,優先順序以設定檔中的順序決定
/foo /foo就是錯誤的設定順序,因為第二個 Alias 永遠不會被執行,愈精確的 Alias 要放在愈前面。
/foo/bar /foo/bar
語法
Alias URL-path file-path|directory-path有趣了,可以指向檔案?那是不是能藉此實做 Front Controller?再研究!
URL-path 區分大小寫。
文件上說 URL-path 結尾有沒有「/」有差別。
Alias /alias /someplace若用 http://.../alias 只能連到第一個 Alias,連不到第二個 Alias,但實機測試好像沒差別,即使最後沒有「/」,瀏覽器都會自動加上「/」,不確定是誰動的手腳,為避免夜長夢多,建議用較寬鬆的方式,也就是第一種不加「/」的 Alias 定義方式。
Alias /alias/ /someplace
Apache 建議的安全性原則中,對 DocumentRoot 給予最嚴格的存取限制,然後再對各個目錄放寬限制,也就是除了上述 Alias 的定義外,通常要再對 Alias 指向的目錄設存取權限。
<Directory "/path/to/other/directory">這是最寬鬆的作法。
Order allow,deny
Allow from all
</Directory>
最後也是最重要的,第一個參數若以「/」結尾,那第二個參數也要以「/」結尾,同樣的,若第一個參數不以「/」結尾,那第二個參數也不可以「/」結尾,總的來說,兩個參數的結尾方式要一樣。
Alias /img/ "/someplace/img"以上述的錯誤設定來說,http://.../img/hello.png 會對應到 /someplace/imghllo.png,也就是說將 URL 切掉第一個參數後,加上第二個參數,就是這樣造成錯誤的;至於設定權限的 Dorectory 路徑則加不加都沒關係,不會受到 Alias 的影響。
雖然說 Alias 是用來指向 DocumentRoot 以外的檔案,但也沒說不能指向 DocumentRoot 或其子目錄,這種作法可以用來做路徑更名,Alias 只能更改 http://domain.name/ 以後的路徑,若要動到 domain name,可以用 Redirect 或者 Rewrite。
Directory
<Directory directory-path>針對 directory-path 進行專屬的設定(directives),效用及於該目錄與其所有子目錄,常與 Alias 搭配使用。
...
</Directory>
directory-path 除明文的絕對路徑外,也可以使用 Unix shell style 來指定路徑。
- ? - 單一字元
- * - 「/」以外的任何字元
- [] - 字元範圍
如果同一個路徑有多個 Directory 設定時,包括來自上層的設定,設定的順序如下
- 最短的路徑最先,也就是最模糊的先。
- 依序套用到最長的路徑,也就是最精確的路徑最後。
- 然後是每一層的.htaccess,由最上層往下到該層
- 最後是由 Regular Expression 設定的 Directory,依照在設定檔中的順序套用
Options
Options [+|-]option [[+|-]option] ...設定指定目錄的功能。
Options All預設值,擁有除了 MultiViews 以外的所有功能。
Options FollowSymLinks可以用來取代 Alias,但不建議這麼做,也僅適用於可以建立 Synlinks 的 Unix 系統,也就是在 DocumentRoot 下建立 Symlinks,然後搭配上述的設定就可以將文件放在 DocumentRoot 以外的地方。
Options Indexes當網址未指定明確的檔案,且 DirectoryIndex 沒有設定或者設定的檔案不存在時,Apache 會列出該層目錄下的所有檔案與目錄。
多用來除錯用,正式環境不建議使用。
Options MultiViews「Content negotiated "MultiViews" are allowed using mod_negotiation.」 不懂。
Options None什麼功能都沒。
同一個目錄若有多個 Options 設定時,最精確的目錄設定優先,因為 Options 可以同時設定多項功能,所以完全是採用最精確的目錄設定,而不是用 merge 的方式。
但可以使用加號「+」與「-」來達成 merge 的效果。
AllowOverride
AllowOverride All|None|directive-type [directive-type] ...設定 .htaccess 裡可以使用的 directives。
All 表示所有的 directives 都可以用,None 則是完全忽略 .htaccess。
Order, Allow, Deny
Order Allow,DenyOrder 常用的兩種設定方式,注意逗號前號無空白。
Order Deny,Allow
第一種:Order Allow,Deny
- Allow 與 Deny 皆符合,Deny。
- 只符合 Allow,Allow。
- 只符合 Deny,Deny。
- 皆不符合,Deny。
Order Allow,Deny第二種:Order Deny,Allow
Deny from all
或者
Order Allow,Deny
Allow from all
Deny from ip1
或者
Order Allow,Deny
Allow from neil.idv
Deny from www.neil.idv
- Allow 與 Deny 皆符合,Allow。
- 只符合 Allow,Allow。
- 只符合 Deny,Deny。
- 皆不符合,Allow。
Order Deny,Allow
Allow from all
或者
Order Deny,Allow
Deny from ip1
Allow from all
或者
Order Deny,Allow
Deny from neil.idv
Allow from www.neil.idv
沒有留言:
張貼留言