管理apache 目錄權限驗證我們都知道可以用:
.htaccess
# 只要加入底下這幾行即可
AuthName "Protect test by .htaccess"
Authtype Basic
AuthUserFile /var/www/apache.passwd
require user test
但是我像用 PHP+MySQL 來管理驗證,不知道要怎麼做?
還有個更進階的就是:
我想要在 192.168.1 區網內不需要驗證,這樣會很複雜嗎?
你可以直接在 apache 上加裝 mod_auth_mysql 取代 mod_authn_file,就可以用 MySQL 來管理認證帳密,不需要透過 PHP。安裝請參考:
http://www.netadmin.com.tw/article_print.aspx?sn=1107150002
或者你也可以捨棄用 apache 發出認證 http header,直接由 PHP 發出認證 http header 並管理之 (帳號密碼可以存在 MySQL 或其它 PHP 可以存取的檔案)。安裝請參考:
http://php.net/manual/zh/features.http-auth.php
區網內不需要認證,那就建立一個內網的虛擬主機,不加上認證機制就行了。例如這台 server 的內網 IP 是 192.168.1.111,那就這樣設:
<pre class="c" name="code">NameVirtualHost *
### 外網會跑到這個網站,並且認證
<VirtualHost _default_>
### 認證設定
### 除了認證之外的其它設定
</VirtualHost>
### 內網會跑到這個網站,不會認證
<VirtualHost *>
ServerName 192.168.1.111
### 除了認證之外的其它設定
</VirtualHost>
感謝您的解答,我本來的意思是這樣:
.htaccess 限制可以進入的 IP
<pre class="c" name="code">
Order Deny,Allow
Deny from All
Allow from 192.168.1
Allow from 127.0.0.1
然後不再此限的話就用 PHP 去驗證。
似乎用純 PHP 來做好像簡單多了,
只不過對伺服器來說哪種比較快速和省資源。
你的設定有問題。其它人都被 Deny from All 給擋掉了,根本進不到 PHP 那一層。
其實都蠻單純的。不過 Apache 比較單純,你不必多寫認證程式。而且直接由 Apache 反應,會比較快速。因為 request 會先由 Apache 接收,再給 php。