台灣最大裝潢接案平台
輕鬆接案網
抓漏新屋裝潢.舊屋裝修.合格裝潢
裝修證照.是專業施工品質的保障

首頁  •  j2h 論壇 • 程式設計討論     • 

[php] Apache 的 mod_rewrite

房東:張經理
發表時間:2015-11-01




最近正想要重寫一套屬於自己實用的 PHP 框架,第一步重要的就是將 PHP 的 Reuqets 寫成一個有用的網址,讓這個新框架在未來變的比較實用。


如果你現在寫的PHP程式還在這網址寫成這樣:



http://www.aaa.cvom/news.php?id=12345


或是在寫購物車時是這樣寫:



http://www.aaa.com/product.php?id=123123


下單的購物車是這樣寫:



http://www.aaa.com/shoppingcart.php

http://www.aaa.com/pay.php

http://www.aaa.com/payok.php


告訴你,這樣寫實在是爛透了!!



未來,要讓網站變的很有高搜尋率,也就是 SEO 要搞的很實用,網址的佈暑就要讓它變的很有可讀性,而不是一推無意義的符號充斥者。


依照目前主流性的框架如 Ruby on Rails 、 Python 的 Django 在URL方式是這樣子做的:



http://www.aaa.com/controller/action/id


因此應該要把那些很醜的URL給改成這樣:



http://www.aaa.com/news.php?id=12345 => http://www.aaa.com/news/show/12345

http://www.aaa.com/product.php?id=123123 => http://www.aaa.com/product/show/123123


將結帳的程序給簡化:



http://www.aaa.com/shoppingcart.php

http://www.aaa.com/pay.php

http://www.aaa.com/payok.php

===> http://www.aaa.com/shoppingcart/pay/123123


將apache的url rewrite 功能開啟


修改apache的httpd.conf設定檔,將 LoadModule rewrite_module libexec/mod_rewrite.so 這段設定打開。

必且要能在自己的目錄中能使用 .htaccess 來修改規則,找出以下的幾段,並修改好。(原來的設定我忘了)



<Directory />

    Options Indexes FollowSymLinks

    AllowOverride all

    Order deny,allow

    allow from all

</Directory>


比較關鍵的是 Options Indexes FollowSymLinks 跟 AllowOverride all 部分。


在 .htaccess 設定改寫規則



Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteRule ^news/(.*)/(.*)$ index.php?controller=news&action=$1&id=$2 [L]

RewriteRule ^product/(.*)/(.*)$ index.php?controller=product&action=$1&id=$2 [L]

RewriteRule ^shoppingcart/(.*)$ index.php?controller=shoppingcart&action=$1 [L]


在 RewriteRule 就可以多寫幾行需要重寫的規則。


PHP 在網取得變數的方法


實際上,你就可以照舊的方式來接受來自網址的變數:



echo $_REUQEST["id"];


只是,若是你在舊的開發專案要改成那樣子,則會在 .htaccess 裡寫很多行的變化規則。


因此以news來說,雅虎新聞是這樣做的:


則規則大概就是這樣:



RewriteRule ^(.*)-([0-9]+)\.html$ news.php?title=$1&id=$2 [L,NC]


title=$1 對應 (.*)

id=$2 對應 ([0-9]+)


.htaccess的設定說明



  • RewriteEngine On 將重寫引擎打開

  • RewriteRule : 重寫規則

  • ([0-9]+): 表示只針對數字做規則

  • ([a-z]+): 表示只針對小寫英文做規則

  • (.*) : 表示任何的字元都可以被規則下去


規則表示式



  • . 任何單一字母

  • ? 0個或是1個字母

  • * 0個或是N個字母

  • + 1個或是N個字母

  • ^ 表示一行的開始

  • $ 表示一行的結束

  • \ 跳脫字元(顯示符號本身)


參數



  • [NC] 不分字母大小寫

  • [NE] 不再輸出轉義特殊字符

  • [OR] 或者, 用來與下一規則連結用

  • [R] 重新導向

  • [F] 重新導向到 403 forbidden 頁面

  • [G] 重新導向到 410 forbidden 頁面

  • [P] 強制使用代理

  • [N] 重新從第一條規則開始運行

  • [L] 表示這是最後一條規則



http://coding.memory-forest.com/apache-%E7%9A%84-mod_rewrite.html



  • 贊助網站       

    廣利不動產-新板特區指名度最高、值得您信賴的好房仲
    您的托付,廣利用心為您服務
    廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲
    完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心!



  •  共 0 人回應

    姓名:
    佈告內容:
    其他選項: