PHP實現url重寫和.htaccess
.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. 找到
Options FollowSymLinks ExecCGI Indexes
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
這個節點,把None改為All.
3. 重啟apache服務
接下來是建立.htaccess檔案,並在裡面寫配置。Windows中新建檔案的時候,不允許檔案只有字尾,可以採用notepad等工具新建另存為該檔名。
如果要實現URL重寫,配置檔案中採用正規表示式是編寫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
網上找了一篇檔案例舉了常用的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 (.*) [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} ^
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
說明:
正規表示式,嚴格匹配類似Controller/Action或者Controller/Action/,對映到a.php
a.php內容
echo "你的controller:".$_GET['controller']."
";
echo "你的action:".$_GET['action'];
?>
輸入
則被解析到
這2個url是等價的。
注意,在對映url後加上查詢字串不影響正常的對映,比如輸入?value=100,也是可以的。
參考文件:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1020/viewspace-2809758/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nginx實現URL重寫Nginx
- .htaccess URL目錄化
- 在struts2中實現去掉字尾及url重寫
- URL重寫(rewrite)的具體實現與異常問題解決
- .htaccess 301重定向
- 【ASP.NET Core】URL重寫ASP.NET
- nginx TP5 URL 重寫Nginx
- IIS SSL認證流程& url重寫
- ThinkPHP5 利用.htaccess檔案的 Rewrite 規則隱藏URL中的 index.phpPHPIndex
- PHP 實現平滑關閉/重啟PHP
- Laravel重寫資源路由自定義URLLaravel路由
- Nginx URL重寫規則配置詳解Nginx
- 【iis】URL重寫可以引用原地址內容
- 應用Url重寫時CSS引用問題CSS
- ThinkPHP5.0 Linux Apache/Nginx重寫URL配置PHPLinuxApacheNginx
- 用RecyclerView 重寫LayoutManager實現BannerViewView
- Aop 設計 - 使用 PHP-parser 重寫 PHP 類PHP
- 通過配置檔案(.htaccess)實現檔案上傳
- Feign實現動態URL
- IIS7.0設定 url重寫成html(偽靜態)HTML
- 手把手教你寫網路爬蟲(7):URL去重爬蟲
- [PHP] 演算法-陣列重複數字統計的PHP實現PHP演算法陣列
- scrapy-redis記錄之,重寫make_request_from_data和make_requests_from_urlRedis
- NodeJS 說說“重寫” 自定義stream 的實現NodeJS
- PHP 方法重寫,引數不同,報錯: DeclarationPHP
- GitLab 實現動態 Environment URLGitlab
- js實現重寫new Date()相容IE6以上JS
- java~重寫hashcode和equalsJava
- php url傳遞陣列PHP陣列
- sql改寫優化:簡單規則重組實現SQL優化
- 短址(short URL)原理及其實現
- js實現獲取URL引數JS
- HashSet中重寫haseCode和equals
- c#重寫和多型C#多型
- .htaccess 去掉www
- 私聊(PHP 實現)PHP
- PHP函式之parse_str()和parse_url()函式PHP函式
- 前端專案透過‘URL 重寫’部署在 IIS 中,訪問 WebAPI 介面前端WebAPI