ITPub博客

首页 > 应用开发 > IT综合 > PHP实现url重写和.htaccess

PHP实现url重写和.htaccess

原创 IT综合 作者:mqp26180 时间:2020-09-18 12:14:31 0 删除 编辑

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

  说明:

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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69976881/viewspace-2722197/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-07-28

  • 博文量
    13
  • 访问量
    16047