PHP實現url重寫和.htaccess

來源:互聯網
上載者:User

.htaccess是一個完整的檔案名稱只有尾碼),它是用於Apache伺服器下的設定檔,當.htaccess檔案放在某一檔案夾下,它僅對該檔案夾下的檔案和檔案夾有效。通過.htaccess檔案,可以設定管理員實現很多功能,比如錯誤定位,密碼保護,IP拒絕,URL重寫等等。

預設的Apache不支援.htaccess,需要修改Apache的設定檔httpd.conf,才能使得.htaccess有效。

配置方法:

配置方面:

1. 找到apache的安裝目錄下的conf下的httpd.conf檔案,開啟檔案修改

LoadModule rewrite_module modules/mod_rewrite.so這行代碼,他前面有個#號,把#號刪掉

2.  找到

<Directory />

   Options FollowSymLinks ExecCGI Indexes

   AllowOverride None

   Order deny,allow

   Deny from all

   Satisfy all

</Directory>

這個節點,把None改為All.<Directory />節點可能有多個,修改和PHP路徑相關的那個。

3. 重啟apache服務

接下來是建立.htaccess檔案,並在裡面寫配置。Windows中建立檔案的時候,不允許檔案只有尾碼,可以採用notepad等工具建立另存新檔該檔案名稱。

如果要實現URL重寫,設定檔中採用Regex是編寫URL,並使之和常規的php檔案對應。常用的寫法如下:

RewriteEngine on                       //on為開啟,off為關閉

RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$ b.php?action=$1&id=$2

RewriteRule ([a-zA-Z1-9]{1,})/([a-zA-Z1-9]{1,})$ a.php?controller=$1&action=$2

RewriteRule MyController/[a-zA-Z1-9]$ MyController.php?action=$1

ErrorDocument 404 /404.txt

網上找了一篇檔案http://roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html例舉了常用的5種映射,也可以參考。

product.php?id=12 to product-12.html

RewriteEngine on  
RewriteRule ^product-([0-9]+)\.html$ product.php?id=$1

Rewriting product.php?id=12 to product/ipod-nano/12.html

RewriteEngine on  
RewriteRule ^product/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ product.php?id=$2

Redirecting non www URL to www URL

RewriteEngine On

RewriteCond %{HTTP_HOST} ^optimaxwebsolutions\.com$  
RewriteRule (.*) http://www.optimaxwebsolutions.com/$1 [R=301,L]

Rewriting yoursite.com/user.php?username=xyz to yoursite.com/xyz

RewriteEngine  On  
RewriteRule ^([a-zA-Z0-9_-]+)$ user.php?username=$1    
RewriteRule ^([a-zA-Z0-9_-]+)/$ user.php?username=$1

Redirecting the domain to a new subfolder of inside public_html.

RewriteEngine  On  
RewriteCond %{HTTP_HOST} ^test\.com$ [OR]    
RewriteCond %{HTTP_HOST} ^www\.test\.com$    
RewriteCond %{REQUEST_URI} !^/new/    
RewriteRule (.*) /new/$1

樣本:

.htaccess檔案內容如下

RewriteEngine on                       //on為開啟,off為關閉

RewriteRule ^([a-zA-Z1-9]{1,})/([a-zA-Z1-9]{1,})$ a.php?controller=$1&action=$2

RewriteRule ^([a-zA-Z1-9]{1,})/([a-zA-Z1-9]{1,})/$ a.php?controller=$1&action=$2

說明:

Regex,嚴格匹配類似Controller/Action或者Controller/Action/,映射到a.php

a.php內容

<?php

echo "你的controller:".$_GET['controller']."<br>";

echo "你的action:".$_GET['action'];

?>

輸入http://localhost:8080/Controller/Action/

則被解析到http://localhost:8080/a.php?controller=Controller&action=Action

這2個url是等價的。

注意,在映射url後加上查詢字串不影響正常的映射,比如輸入http://localhost:8080/Controller/Action/?value=100,也是可以的。

參考文檔:

http://www.htaccess-guide.com/

http://corz.org/serv/tricks/htaccess.php

http://roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.