iT邦幫忙

0

apache 目錄權限驗證?可以用 PHP MySQL 管理驗證嗎?

管理apache 目錄權限驗證我們都知道可以用:
.htaccess

# 只要加入底下這幾行即可
AuthName     "Protect test by .htaccess"
Authtype     Basic
AuthUserFile /var/www/apache.passwd
require user test

但是我像用 PHP+MySQL 來管理驗證,不知道要怎麼做?

還有個更進階的就是:
我想要在 192.168.1 區網內不需要驗證,這樣會很複雜嗎?

1 個回答

4
wiseguy
iT邦超人 1 級 ‧ 2012-05-03 09:34:57
最佳解答

你可以直接在 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>
看更多先前的回應...收起先前的回應...
drtiger iT邦研究生 5 級 ‧ 2012-05-03 12:20:33 檢舉

感謝您的解答,我本來的意思是這樣:
.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 來做好像簡單多了,
只不過對伺服器來說哪種比較快速和省資源。

wiseguy iT邦超人 1 級 ‧ 2012-05-03 16:53:12 檢舉

你的設定有問題。其它人都被 Deny from All 給擋掉了,根本進不到 PHP 那一層。
其實都蠻單純的。不過 Apache 比較單純,你不必多寫認證程式。而且直接由 Apache 反應,會比較快速。因為 request 會先由 Apache 接收,再給 php。

drtiger iT邦研究生 5 級 ‧ 2012-05-04 09:29:47 檢舉

wiseguy提到:
Deny from All

我就是希望全部擋掉的這部分改由 Apache 驗證,
而驗證這部分我是想用 PHP 來做,
因為 HINET 有動態密碼鎖,我希望用它來做驗證,
所以必須使用 PHP 來寫!

wiseguy iT邦超人 1 級 ‧ 2012-05-05 19:08:19 檢舉

如果你要整合HINET動態密碼鎖,那是用 php 管控比較容易沒錯,不過因為處理流程是先 apache 再 php,如果 apache 全擋掉,那 php 根本不會接到 request 了。這樣你瞭解嗎?

drtiger iT邦研究生 5 級 ‧ 2012-05-06 01:16:08 檢舉

我了解您的意思!
所以還是用 PHP 來解決,感謝您!

我要發表回答

立即登入回答