php url重写例子 htaccess实现url重写

发布时间:2020-05-22编辑:脚本学堂
有关php url重写的例子,php中使用.htaccess实现url重写,默认的Apache不支持.htaccess,需要修改Apache的配置文件httpd.conf,才能使得.htaccess有效。

.htaccess用于apache/ target=_blank class=infotextkey>apache服务器下的配置文件,当.htaccess文件放在某一文件夹下,它仅对该文件夹下的文件和文件夹有效。
通过.htaccess文件,可以配置比如错误定位,密码保护,ip拒绝,url重写等。
默认的apache不支持.htaccess,需要修改apache的配置文件httpd.conf,才能使得.htaccess有效。

一、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重写,配置文件中采用正则表达式是编写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
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.jb200.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

说明:
正则表达式,严格匹配类似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,也是可以的。