apache rewrite重写配置和本机域名配置,访问权限设置,伪静态实际应用

在实际开发中,我们实现伪静态,用的更多的还是rewrite 机制,但是他任然是以正则技术为基础的.

 

我们看看如何实现:

 

说明:

比如 http://www.hsp.com/news.php?type=music&id=100 

希望上面的url 变成

http://www.hsp.comt/news-music-id100.html

 

 

步骤开始:

(1)   启用rewrite模块,在默认情况下,没有启用

修改httpd.conf文件

#启动rewrite模块

LoadModule rewrite_modulemodules/mod_rewrite.so

 

确认是否启动成功

<?php phpinfo();?>

(2)   配置我们的虚拟主机

httpd.conf 打开虚拟主机的配置文件

 

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

 

修改httpd-vhost.conf

<VirtualHost *:80>

   DocumentRoot "C:/myenv/apache/htdocs/static2"

   #Directory配置节点,用于指定该目录下的文件或是图片.的访问权限

    #设置虚拟主机的错误页面,欢迎页面

   <Directory "C:/myenv/apache/htdocs/static2">

   </Directory>

</VirtualHost>

(3)   在hosts文件中,配置ip和主机的对应关系

127.0.0.1 www.hsp.com

(4)   这时我们访问 http//www.hsp.com/news.php

 

我们可以访问到该页面.

 

☞ 一个重要的知识点:

在apache服务器中,如果某个文件夹,没有指定访问权限,则以上级目录的权限为准,如果他自己指定了访问权限,则以自己的为准.

 

 

请注意,在配置访问权限的时候,顺序很重要:

#Order allow,deny 表示先看allow ,在看deny,留下的就是可以访问

    Order deny,allow

   Deny from all

   allow from 127.0.0.1

 

(5)   关于<Directory> 节点配置必须掌握

比较完整的配置文件

第一种配置方式

<VirtualHost *:80>

   DocumentRoot "C:/myenv/apache/htdocs/static2"

   #Directory配置节点,用于指定该目录下的文件或是图片.的访问权限

    #设置虚拟主机的错误页面,欢迎页面

   ServerName www.hsp.com

    <Directory"C:/myenv/apache/htdocs/static2">

       #这里可以指定是否让人访问

       #Allowfrom all

       #是否列出文件目录结构

       #如果希望列出 indexes不希望 none

       #Optionsindexes

       #如何配置网站的首页面

       DirectoryIndexabc.html abc2.html

       #如何配置404错误页面,引导用户引入新页面

       errorDocument404 /404.html

       #配置我们的rewrite规则

       RewriteEngineOn

       #rewrite的规则 如果 aaa.html 就跳转到news.php

       #$1表示反向引用,第一个子表达式的内容

       #说明如果在正则规范中直接引用子表达式的内容,则使用\n

       #如果是在后面因为,则使用$n

       RewriteRulenews-([a-zA-Z]+)-id(\d+)\.html$ news.php?type=$1&id=$2

   </Directory>

</VirtualHost>

 

特别说明: 容易犯的错误,一定要记住启用rewrite模块.

 

 

思考: 上面我们配置都要去修改 httpd-vhost.文件,但管理员不给你这个权限,怎么办?

思路: 可以把配置,写到 .htaccess文件.

 

第二种配置方式: 即把一部分配置放在 http-vhost.conf 文件, 把rewrite 规则放在 .htaccess

<VirtualHost *:80>

   DocumentRoot "C:/myenv/apache/htdocs/static2"

   #Directory配置节点,用于指定该目录下的文件或是图片.的访问权限

    #设置虚拟主机的错误页面,欢迎页面

   ServerName www.hsp.com

   <Directory "C:/myenv/apache/htdocs/static2">

       #这里可以指定是否让人访问

       #Allowfrom all

       #是否列出文件目录结构

       #如果希望列出 indexes不希望 none

       #Optionsindexes

       #如何配置网站的首页面

       DirectoryIndexabc.html abc2.html

       #如何配置404错误页面,引导用户引入新页面

       errorDocument404 /404.html

       #如果你配置了allowoverride all 这表示到对应的目录的.htaccess去匹配规则

    allowoverrideall

   </Directory>

</VirtualHost>

 

在对应的文件下.htaccess文件

<IfModule rewrite_module>

#如果rewrite 模块启用

#配置我们的rewrite规则

RewriteEngine On

#rewrite的规则如果 aaa.html 就跳转到news.php

#$1 表示反向引用,第一个子表达式的内容

#说明如果在正则规范中直接引用子表达式的内容,则使用\n

#如果是在后面因为,则使用$n

RewriteRulenews-([a-zA-Z]+)-id(\d+)\.html$ news.php?type=$1&id=$2

#RewriteRule aaa.html  news.php

</IfModule>

 

请注意: 项目中的 .htaccess文件的配置也是继承管理

 

第三种配置方法:

http-vhost.conf

<VirtualHost *:80>

   DocumentRoot "C:/myenv/apache/htdocs/static2"

   #Directory配置节点,用于指定该目录下的文件或是图片.的访问权限

    #设置虚拟主机的错误页面,欢迎页面

   ServerName www.hsp.com

   <Directory "C:/myenv/apache/htdocs/static2">

       #如果你配置了allowoverride all 这表示到对应的目录的.htaccess去匹配规则

       allowoverrideall

   </Directory>

</VirtualHost>

 

.htacces文件

 

#这里可以指定是否让人访问

       #Allowfrom all

       #是否列出文件目录结构

       #如果希望列出 indexes不希望 none

       #Optionsindexes

       #如何配置网站的首页面

       DirectoryIndexabc.html abc2.html

       #如何配置404错误页面,引导用户引入新页面

       errorDocument404 /404.html

<IfModule rewrite_module>

#如果rewrite 模块启用

#配置我们的rewrite规则

RewriteEngine On

#rewrite的规则如果 aaa.html 就跳转到news.php

#$1 表示反向引用,第一个子表达式的内容

#说明如果在正则规范中直接引用子表达式的内容,则使用\n

#如果是在后面因为,则使用$n

RewriteRulenews-([a-zA-Z]+)-id(\d+)\.html$ news.php?type=$1&id=$2

#RewriteRule aaa.html  news.php

</IfModule>


u  伪静态的实际运用

1.      在一个项目中有两个文件夹,public 和 private ,public文件夹的图片可以被所有人访问.private只能自己访问.请问如何实现. 

第一个方法是. 在 public 和 private 下创建 .htaccess 文件,对于private 只让127.0.0.1访问 public 文件都可以访问

private 文件夹下的配置 .htaccess

Order deny, allow

deny from all

allow from 127.0.0.1

这个的缺点是,没有办法去控制,本apahce的另外一个虚拟主机请求., 另外不能精细化控制,于是我们就换了一个思路使用 http的 referer头信息搞定这个防盗链需求.

第二方法.在private 文件夹下 .htaccess

<ifModule rewrite_module>

RewriteEngine On

#你怎么知道,这个请求就是www.hsp.com发来的. referer

#如果你请求的是一个jpg图片, 就禁止

RewriteCond %{HTTP_REFERER}!www.hsp.com 

RewriteRule .*\.jpg -[F]

</ifModule>

 

☞ 说一下如果你的RewriteCond有多个条件

<ifModule rewrite_module>

RewriteEngine On

#你怎么知道,这个请求就是www.hsp.com发来的. referer

#如果你请求的是一个jpg图片, 就禁止

RewriteCond %{HTTP_REFERER} !www.hsp.com

#RewriteCond %{ REQUEST_FILENAME} !-f

RewriteRule .*\.jpg -[F]

</ifModule>

u  伪静态实际运用案例2

 

www.hsp.com 的主目录下,我们编写了 .htaccess文件,并增加规则

 

#增加规则

RewriteRule index\/login index.php?c=index&a=login

RewriteRule ([a-zA-Z_]+)\/([a-zA-Z_]+) index.php?c=$1&a=$2

 

 

u  伪静态的实际运用3->引出rewriteCond的使用

 

思考: 可能有条件指令.

网上找到方案:

 

 

最后的配置在.htaccess

 

#如果请求的不是一个文件

RewriteCond %{REQUEST_FILENAME} !-f

#并且不是一个目录

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ccc.html index.php

 

 

伪静态的实际运用案例4:

在TP框架中使用rewrite简化url地址,目的是SEO, 步骤

1.      在httpd.conf 文件中启用rewrite模块

2.      在虚拟主机中配置 allowoverride all

3.      在tp的配置文件中conf/config 文件把 URL_MODEL 配置2

4.      在tp框架的入口目录增加.htaccess文件 写入规则

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)(?!WebApp)$ index.php/$1 [QSA,PT,L]
</IfModule>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值