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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- .htaccess技巧: URL重寫(Rewrite)與重定向(Redirect)
- Nginx實現URL重寫Nginx
- 使用HttpModule實現URL重寫HTTP
- 請問如何實現URL重寫?
- Nginx實戰(二) URL重寫Nginx
- Java UrlRewrite 實現網站URL重寫過程實錄Java網站
- nginx url重寫Nginx
- 在struts2中實現去掉字尾及url重寫
- ASP.NET URL Rewrite. URL重寫ASP.NET
- URL 重寫新手指南
- URL重寫(rewrite)的具體實現與異常問題解決
- nginx TP5 URL 重寫Nginx
- 【ASP.NET Core】URL重寫ASP.NET
- IIS SSL認證流程& url重寫
- Session,Cookie,jsessionid,Url重寫SessionCookieJS
- 使用 HTTP 模組執行 URL 重寫HTTP
- htaccess RewriteRule 解決多種格式的URL解析
- ThinkPHP5 利用.htaccess檔案的 Rewrite 規則隱藏URL中的 index.phpPHPIndex
- Nginx URL重寫規則配置詳解Nginx
- Laravel重寫資源路由自定義URLLaravel路由
- PHP 實現平滑關閉/重啟PHP
- 如何 把下面這個url 重寫 用response 重寫到請求中...
- Nginx實現url請求不區分大小寫Nginx
- ASP.NET URL雙向改寫的實現ASP.NET
- 用RecyclerView 重寫LayoutManager實現BannerViewView
- 應用Url重寫時CSS引用問題CSS
- IIS7 asp.net URL重寫配置ASP.NET
- 【iis】URL重寫可以引用原地址內容
- Exchange域名重寫,實現SMTP地址共享
- ThinkPHP5.0 Linux Apache/Nginx重寫URL配置PHPLinuxApacheNginx
- 更快的方式實現 PHP 陣列去重PHP陣列
- 實用 .htaccess 用法大全
- 通過配置檔案(.htaccess)實現檔案上傳
- Aop 設計 - 使用 PHP-parser 重寫 PHP 類PHP
- 利用apache的mod_rewrite做URL規則重寫Apache
- UrlReWrite(Url重寫或偽靜態)完美示例原始碼原始碼
- PHP實現日誌寫入log.txtPHP
- 自定義HttpMessageHandler實現HTTP方法的重寫HTTP