PHP Apache URL 重寫技術(shù)是在 Web 開發(fā)中經(jīng)常用到的技術(shù),它能夠幫助我們重寫 URL 地址,讓網(wǎng)站更加友好。這個(gè)技術(shù)充分利用 Apache 服務(wù)器的模塊化屬性,從而把請(qǐng)求重寫為服務(wù)端能夠解析的 URL,使得訪問者在訪問網(wǎng)站時(shí),感覺更加自然。
重寫 URL 可以被應(yīng)用到各種場(chǎng)景,例如 URL 的保護(hù),使得無法訪問某些私人資源;SEO,使用更優(yōu)化的 URL 地址,使得搜索引擎能夠正確引用頁面;虛擬目錄,美化 URL 地址等等。
一個(gè)經(jīng)典的例子是 WordPress 常用的 Permalinks(永久鏈接)結(jié)構(gòu),可以將默認(rèn)的博客 URL 由形如 “http://example.com?p=123” 變?yōu)楦觾?yōu)化的結(jié)構(gòu) “http://example.com/post-title”。
下面我們來學(xué)習(xí)如何通過 Apache 服務(wù)器的 mod_rewrite 模塊實(shí)現(xiàn) URL 重寫技術(shù)。
首先,我們要打開 Apache 的 mod_rewrite 模塊,在 Apache 的主配置文件 httpd.conf 文件中,找到以下這段配置代碼:
```
# Load module rewrite_module modules/mod_rewrite.so
```
刪除#號(hào),即可啟用 mod_rewrite 模塊。
接著,在 Apache 的虛擬主機(jī)配置文件中,找到以下的配置:
```AllowOverride None
Require all granted ```
將其修改為:
```AllowOverride All
Require all granted ```
這樣設(shè)置,就會(huì)允許虛擬主機(jī)中的 .htaccess 文件能夠被解析。
接著,在你的 Web 應(yīng)用程序的 docroot(文檔根目錄)中創(chuàng)建一個(gè) .htaccess 文件。
我們用以下代碼來實(shí)現(xiàn)最常見的 URL 重寫:
`\*.php` 轉(zhuǎn)換到 `http://example.com/foo.php`
在 .htaccess 文件中添加以下代碼:
```
RewriteEngine on
RewriteRule ^foo/?$ foo.php [NC,L]
```
其中,RewriteEngine on 表示開啟 URL 重寫;RewriteRule 是 URL 重寫規(guī)則的設(shè)置,^foo/?$ 是匹配的 URL,foo.php 響應(yīng)的 PHP 文件,NC 表示忽略大小寫(不區(qū)分大小寫),L 表示本條規(guī)則是最后一條。
這個(gè)規(guī)則表示任何名為 foo 的請(qǐng)求都被重寫到 foo.php 文件,例如:
http://example.com/foo
http://example.com/foo/
http://example.com/foo.php?test=abc
都將被重寫到 http://example.com/foo.php 的頁面。
還有一個(gè)非常常見的規(guī)則是移除頁面的 .php 后綴,例如:
從 `http://example.com/page.php` 轉(zhuǎn)換到 `http://example.com/page`
這可以通過以下的 .htaccess 規(guī)則來實(shí)現(xiàn):
```
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
```
這個(gè)規(guī)則包括三個(gè)部分:第一個(gè)是開啟 URL 重寫;第二個(gè)設(shè)置條件,如果請(qǐng)求的文件名不存在,則請(qǐng)求不被重寫;第三個(gè)條件表示放問的文件加上.php 文件真實(shí)存在,則請(qǐng)求被重寫至該文件名。
這個(gè)規(guī)則通過 .htaccess 文件實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),所以用戶請(qǐng)求的文件名不需要添加 .php 后綴。規(guī)則還可以優(yōu)化,例如:
```
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*/?)$ $1.php [NC,L]
```
這個(gè)規(guī)則支持省略最后的 / 符號(hào),會(huì)將 http://example.com/page 和 http://example.com/page/ 都轉(zhuǎn)發(fā)至 page.php 文件。
還有很多高級(jí)的規(guī)則,例如路由,將某個(gè) URL 地址轉(zhuǎn)發(fā)到指定的 PHP 文件或是處理類,使得開發(fā)人員可以更加靈活地實(shí)現(xiàn) URL 重寫。總而言之,使用 PHP Apache URL 重寫技術(shù),我們可以更加靈活地處理 URL 地址,使得我們的 Web 應(yīng)用程序更加靈活、舒適。
網(wǎng)站導(dǎo)航
- zblogPHP模板zbpkf
- zblog免費(fèi)模板zblogfree
- zblog模板學(xué)習(xí)zblogxuexi
- zblogPHP仿站zbpfang