偽靜態indexphp
① apache 偽靜態如何隱藏index.php
Apache偽靜態配置方法有兩種:
在網站根目錄下添加文件,.htaccess,在此文件內寫偽靜態規則,使用它需要在apache配置文件http.conf中完成相應配置.具體配置方法網上很多,這里不再贅述.
而另一種是直接在httpd.conf中使用.這種方法性能高於前者。
應用場景
(1),採用.htaccess的場景
用戶需要針對特定目錄改變伺服器的配置而又沒有root許可權的情況下,可以通過.htaccess文件實現。
如果伺服器管理員不願意頻繁修改配置,則可 以允許用戶通過.htaccess文件自己修改配置. 比如ISP,在同一個機器上運行了多個用戶站點,希望用戶可以自
己改變配置,便可以配置好apache,開啟對.htaccess文件的支持即可.
(2),不採用.htaccess的場景
雖然上述步驟1可以實現,但一般都應該盡可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件(http.conf)的段中,而且更高效。
(3)避免使用.htaccess文件有兩個主要原因
首先是性能。如果AllowOverride啟用了.htaccess文件,則Apache需要在每個目錄中查找.htaccess文件,因此,無論是否真正用到,啟用.htaccess都會導致
性能的下降。另外,對每一個請求,都需要讀取一次.htaccess文件。
還有,Apache必須在所有上級的目錄中查找.htaccess文件,以使所有有效的指令都起作用,所以,如果請求/www/htdocs/example中的頁面,Apache必須查找以下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
總共要訪問4個額外的文件,即使這些文件都不存在。(注意,這可能僅僅由於允許根目錄」/」使用.htaccess ,雖然這種情況並不多。)
其次是安全。這樣會允許用戶自己修改伺服器的配置,這可能會導致某些意想不到的修改,所以請認真考慮是否應當給予用戶這樣的特權。但是,如果給予用
戶較少 的特權而不能滿足其需要,則會帶來額外的技術支持請求,所以,必須明確地告訴用戶已經給予他們的許可權,說明AllowOverride設置的值,並引導他
們參閱相應的說明,以免日後生出許多麻煩。
注意,在/www/htdocs/example目錄下的.htaccess文件中放置指令,與在主配置文件中段中放置相同指令,是完全等效的。
總結
由上我們可以知道,使用.htaccess文件具有性能上的不利之處,所以我們應該盡可能避免使用.htaccess文件,下面介紹一種不使用.htaccess文件進行偽靜態
的方法:
Apache 1.x 的用戶請檢查 conf/httpd.conf 中是否存在如下兩段代碼:
LoadMole rewrite_mole libexec/mod_rewrite.so
AddMole mod_rewrite.c
Apache 2.x 的用戶請檢查 conf/httpd.conf 中是否存在如下一段代碼:
LoadMole rewrite_mole moles/mod_rewrite.so
如果存在,且以#開頭,請刪除#。然後在配置文件(通常就是 conf/httpd.conf或者conf/extra/httpd-vhosts.conf)中加入如下代碼。此時請務必注意,如果網
站使用通過虛擬主機來定義,請務必加到虛擬主機配置段 中去,如果加在虛擬主機配置外部將可能無法使用。改好後然後將 Apache 重啟。
例
①.在apache配置文件httpd.conf中找到:
LoadMole rewrite_mole moles/mod_rewrite.so
這句,去掉前邊的注釋符號「#」,如果沒有則添加這句。
②.在代碼:
Options FollowSymLinks
AllowOverride None
下面添加偽靜態代碼(以Wordpress偽靜態為例):
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
其中/usr/local/apache/htdocs/wwwtest即為要進行偽靜態的網站的根目錄
③.重啟apache
② PHP本地如何實現偽靜態頁面
Apache的 mod_rewrite是比較強大的,在進行網站建設時,可以通過這個模塊來實現偽靜態。
主要步驟如下: 1.檢測Apache是否開啟mod_rewrite功能 可以通過php提供的phpinfo()函數查看環境配置,找到「Loaded Moles」,其中列出了所有apache2handler已經開啟的模塊,如果裡麵包括「mod_rewrite」,則已經支持,不再需要繼續設置。如果沒有開啟「mod_rewrite」,則打開目錄 apache目錄下的「/apache/conf/」 ,找到 httpd.conf 文件,再找到「LoadMole rewrite_mole」,將前面的」#」號刪除即表示取用該功能。 如果沒有查找到「LoadMole」 區域,可以在最後一行加入「LoadMole rewrite_mole ,moles/mod_rewrite.so」(獨佔一行),之後重啟apache伺服器。再通過phpinfo()函數查看環境配置就有「mod_rewrite」為項了.。
2.讓apache伺服器支持.htaccess 如何讓自己的本地APACHE伺服器支持:「htaccess」呢? 只需修改apache的httpd.conf設置就可以讓 APACHE支持「.htaccess」了。打開 APACHE目錄的CONF目錄下的httpd.conf文件,找到: Options FollowSymLinks AllowOverride None 改為 Options FollowSymLinks AllowOverride All 就行了。
3.建立.htaccess 文件 建立.htaccess文件時要注意,不能直接建,方法是通過記事本中的另存為菜單,在文件名窗口輸入:「.htaccess」,然後點擊保存。
4.rewrite規則學習 在新建.htaccess文件之後,就在裡面寫入以下內容: RewriteEngine on #rewriteengine為重寫引擎開關on為開啟off為關閉 RewriteRule ([0-9]{1,})$index.php?id=$1 在這里,RewriteRule是重寫規則,是用正則表達式的句子,([0-9]{1,})表示由數字組成的,$表示結束標志,表示以數字結束!如果要實現偽靜態頁面,規則如下: RewriteEngine on RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$index.php?action=$1&id=$2 在為個正則表達式中,([a-zA-Z]{1,})-([0-9]{1,}).html$是規則,index.php?action=$1&id=$2是要替換的格式,$1代表第1括弧匹配的值,$2代表第二個括弧的值,如此類推! 測試PHP腳本如下: index.php文件中的代碼如下: echo 『你的Action值為:』 . $_GET['action']; echo 『 』; echo 『ID值為:』 . $_GET['id']; ?>
在瀏覽器地址欄輸入: localhost/page-18.html 輸出的是: 你的Action值為:page ID值為:18