`
sogo6
  • 浏览: 113289 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

php 伪静态 (url rewrite mod_rewrite 重写) 本地APACHE支持urlrewrite 本地APACHE支持.htaccess

阅读更多
mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面。下面我详细说说它的使用方法!对初学者很有用的哦!

1.检测Apache是否支持mod_rewrite

通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。

如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/apache/conf/” 下的 httpd.conf 文件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。

如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module modules/mod_rewrite.so”(必选独占一行),然后重启apache服务器即可。

2.让apache服务器支持.htaccess

如何让自己的本地APACHE服务器支持”.htaccess”呢?其实只要简单修改一下apache的httpd.conf设置就可以让 APACHE支 持.htaccess了。打开httpd.conf文件(在那里? APACHE目录的CONF目录里面),用文本编辑器打开后,查找

Options FollowSymLinks

AllowOverride None

改为

Options FollowSymLinks

AllowOverride All

就可以了。

3.建立.htaccess 文件

如果是在windows平台下,刚开始还真不知道怎么建立”.htaccess”文件,因为这个文件实际上没有文件名,仅仅只有扩展名,通过普通方 式是无法建立这个文件的,别着急,马上告诉你三种方法:三种方法都是先建立一个htaccess.txt的文本文件(当然,这个文本文件的名字你可以随便 取),然后有三种方式给这个文件重命名:

(1)用记事本 打开,点击文件–另存为,在文件名窗口输入”.htaccess”,注意是整个绿色部分,也就是包含英文引号,然后点击保存就行了。

(2)进入cmd命令 窗口,通过cd切换当刚建立htaccess.txt文件的文件夹,然后输入命令:rename htaccess.txt .htaccess ,然后点击键盘Enter键即可。

(3)通过ftp连接htaccess.txt所在文件夹,通过ftp软件重命名。

4.rewrite规则学习

我们新建一个.htaccess文件之后,就在里面写入以下内容:

RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭

RewriteRule ([0-9]{1,})$ index.php?id=$1

我讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的([0-9]{1,})是指由数字组成的,$是结束标志,说明是以数字结束!

好吧,现在我们可以实现伪静态页面了,写下一下的规则:

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$ index.php?action=$1&id=$2

</IfModule>

([a-zA-Z]{1,})-([0-9]{1,}).html$是规则,index.php?action=$1&id=$2是要替换的格式,$1代表第一个括号匹配的值,$2代表第二个,如此类推!!

我们写一个处理的PHP脚本:

index.php

PHP代码
<?php
echo ‘你的Action是:’ . $_GET['action'];
echo ‘<br/>’;
echo ‘你的ID是:’ . $_GET['id'];
?>
好了,我们现在在浏览器中输入:

localhost/view-12.html

输出的是:

你的Action是:view

你的ID是:12

===================一道华丽的分割线================

13 个mod_rewrite 应用举例

1.给子域名加www标记
RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .? http://www.%1example.com%{REQUEST_URI} [R=301,L]
这个规则抓取二级域名的%1变量,如果不是以www开始,那么就加www,以前的域名以及{REQUEST_URI}会跟在其后。

2.去掉域名中的www标记
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule .? http://example.com%{REQUEST_URI} [R=301,L]

3.去掉www标记,但是保存子域名
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?example\.com)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]
这里,当匹配到1%变量以后,子域名才会在%2(内部原子)中抓取到,而我们需要的正是这个%1变量。

4.防止图片盗链
一些站长不择手段的将你的图片盗链在他们网站上,耗费你的带宽。你可以加一下代码阻止这种行为。
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/ [NC]
RewriteRule \.(gif|jpg|png)$ - [F]
如果{HTTP_REFERER}值不为空,或者不是来自你自己的域名,这个规则用[F]FLAG阻止以gif|jpg|png 结尾的URL
如果对这种盗链你是坚决鄙视的,你还可以改变图片,让访问盗链网站的用户知道该网站正在盗用你的图片。
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example\.com/.*$ [NC]
RewriteRule \.(gif|jpg|png)$ 你的图片地址 [R=301,L]
除了阻止图片盗链链接,以上规则将其盗链的图片全部替换成了你设置的图片。
你还可以阻止特定域名盗链你的图片:
RewriteCond %{HTTP_REFERER} !^http://(www\.)?leech_site\.com/ [NC]
RewriteRule \.(gif|jpg|png)$ - [F,L]
这个规则将阻止域名黑名单上所有的图片链接请求。
当然以上这些规则都是以{HTTP_REFERER}获取域名为基础的,如果你想改用成IP地址,用{REMOTE_ADDR}就可以了。

5.如果文件不存在重定向到404页面
如果你的主机没有提供404页面重定向服务,那么我们自己创建。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .? /404.php [L]
这里-f匹配的是存在的文件名,-d匹配的存在的路径名。这段代码在进行404重定向之前,会判断你的文件名以及路径名是否存在。你还可以在404页面上加一个?url=$1参数:
RewriteRule ^/?(.*)$ /404.php?url=$1 [L]
这样,你的404页面就可以做一些其他的事情,例如默认信心,发一个邮件提醒,加一个搜索,等等。

6.重命名目录
如果你想在网站上重命名目录,试试这个:
RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,L]
在规则里我添加了一个“.”(注意不是代表得所有字符,前面有转义符)来匹配文件的后缀名。

7.将.html后缀名转换成.php
前提是.html文件能继续访问的情况下,更新你的网站链接。
RewriteRule ^/?([a-z/]+)\.html$ $1.php [L]
这不是一个网页重定向,所以访问者是不可见的。让他作为一个永久重定向(可见的),将FLAG修改[R=301,L]。

8.创建无文件后缀名链接
如果你想使你的PHP网站的链接更加简洁易记-或者隐藏文件的后缀名,试试这个:
RewriteRule ^/?([a-z]+)$ $1.php [L]
如果网站混有PHP以及HTML文件,你可以用RewriteCond先判断该后缀的文件是否存在,然后进行替换:
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?([a-zA-Z0-9]+)$ $1.php [L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^/?([a-zA-Z0-9]+)$ $1.html [L]
如果文件是以.php为后缀,这条规则将被执行。

9.检查查询变量里的特定参数
如果在URL里面有一个特殊的参数,你可用RewriteCond鉴别其是否存在:
RewriteCond %{QUERY_STRING} !uniquekey=
RewriteRule ^/?script_that_requires_uniquekey\.php$ other_script.php [QSA,L]
以上规则将检查{QUERY_STRING}里面的uniquekey参数是否存在,如果{REQUEST_URI}值为script_that_requires_uniquekey,将会定向到新的URL。

10.删除查询变量
Apache的mod_rewrite模块会自动辨识查询变量,除非你做了以下改动:
a).分配一个新的查询参数(你可以用[QSA,L]FLAG保存最初的查询变量)
b).在文件名后面加一个“?”(比如index.php?)。符号“?”不会在浏览器的地址栏里显示。

11.用新的格式展示当前URI
如果这就是我们当前正在运行的URLs:/index.php?id=nnnn。我们非常希望将其更改成/nnnn并且让搜索引擎以新格式展现。首先,我们为了让搜索引擎更新成新的,得将旧的URLs重定向到新的格式,但是,我们还得保证以前的index.php照样能够运行。是不是被我搞迷糊了?
实现以上功能,诀窍就在于在查询变量中加了一个访问者看不到的标记符“marker”。我们只将查询变量中没有出现“marker”标记的链接进行重定向,然后将原有的链接替换成新的格式,并且通过[QSA]FLAG在已有的参数加一个“marker”标记。以下为实现的方式:
RewriteCond %{QUERY_STRING} !marker
RewriteCond %{QUERY_STRING} id=([-a-zA-Z0-9_+]+)
RewriteRule ^/?index\.php$ %1? [R=301,L]
RewriteRule ^/?([-a-zA-Z0-9_+]+)$ index.php?marker &id=$1 [L]
这里,原先的URL:http://www.example.com/index.php?id=nnnn,不包含marker,所以被第一个规则永久重定向到http://www.example.com/nnnn,第二个规则将http://www.example.com/nnnn反定向到http://www.example.com/index.php?marker&id=nnnn,并且加了marker以及id=nnnn两个变量,最后mod_rewrite就开始进行处理过程。
第二次匹配,marker被匹配,所以忽略第一条规则,这里有一个“.”字符会出现在http://www.example.com/index.php?marker &id=nnnn中,所以第二条规则也会被忽略,这样我们就完成了。
注意,这个解决方案要求Apache的一些扩展功能,所以如果你的网站放于在共享主机中会遇到很多障碍。

12.保证安全服务启用
Apache可以用两种方法辨别你是否开启了安全服务,分别引用{HTTPS}和{SERVER_PORT}变量:
RewriteCond %{REQUEST_URI} ^secure_page\.php$
RewriteCond %{HTTPS} !on
RewriteRule ^/?(secure_page\.php)$ https://www.example.com/$1 [R=301,L]
以上规则测试{REQUEST_URI}值是否等于我们的安全页代码,并且{HTTPS}不等于on。如果这两个条件同时满足,请求将被重定向到安全服务URI.另外你可用{SERVER_PORT}做同样的测试,443是常用的安全服务端口
RewriteCond %{REQUEST_URI} ^secure_page\.php$
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(secure_page\.php)$ https://www.example.com/$1 [R=301,L]

13.在特定的页面上强制执行安全服务
遇到同一个服务器根目录下分别有一个安全服务域名和一个非安全服务域名,所以你就需要用RewriteCond 判断安全服务端口是否占用,并且只将以下列表的页面要求为安全服务:
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/?(page1|page2|page3|page4|page5)$ https://www.example.com/%1[R=301,L]
以下是怎样将没有设置成安全服务的页面返回到80端口:
RewriteCond %{ SERVER_PORT } ^443$
RewriteRule !^/?(page6|page7|page8|page9)$http://www.example.com%{REQUEST_URI} [R=301,L]
分享到:
评论

相关推荐

    让IIS支持Apache .htaccess 伪静态规则

    这两种服务器在处理URL重写和伪静态规则方面有所不同,Apache通常使用的是.htaccess文件,而IIS则使用其内置的URL重写模块。本篇文章将详细讲解如何让IIS支持Apache的.htaccess伪静态规则。 首先,了解什么是伪静态...

    nginx支持.htaccess伪静态rewrite的方法.docx

    Nginx 支持 .htaccess 伪静态 Rewrite 的方法 ...使用 Nginx 支持 .htaccess 伪静态 Rewrite 的方法可以实现 URL 重写,提高网站的访问速度和用户体验。但是,需要注意 .htaccess 文件的安全性,避免敏感信息泄露。

    isapi_rewrite3_full.htaccess

    标题 "isapi_rewrite3_full.htaccess" 暗示了我们正在讨论的是一个与IIS(Internet Information Services)服务器相关的配置文件,特别是关于ISAPI_Rewrite模块的使用,它是一个能够实现URL重写和URL伪装功能的工具...

    UrlReWrite(Url重写或伪静态)完美示例源码

    Url重写技术,通常以Apache的mod_rewrite模块和IIS的UrlRewrite模块为代表,是Web服务器中的一个重要功能,用于优化网站的URL结构,提高用户体验并有助于搜索引擎优化(SEO)。在本示例源码中,我们将深入理解Url...

    伪静态组件Rewrite

    3. **URL匹配**:当用户访问伪静态URL时,Apache服务器会根据`.htaccess`中的RewriteRule去匹配并执行相应的重写操作。 4. **内部重定向**:重写后,服务器并不会真的返回一个静态HTML文件,而是内部处理这个新的...

    UrlReWrite(Url重写或伪静态)

    UrlRewrite是一个强大的URL管理工具,它主要用于将复杂的URL转换为简单、易记且友好的形式,这个过程被称为URL重写或伪静态处理。在Web开发中,URL重写技术对于提升用户体验、优化搜索引擎排名(SEO)以及维护网站...

    Apache的Mode Rewrite模块和.htaccess文件配合.docx

    Apache的Mode Rewrite模块和.htaccess文件配合是实现URL重写和访问控制的重要组件。通过本文,我们了解了Mode Rewrite模块和.htaccess文件的概念、配置方法和应用场景,并了解了如何使用这两个组件来实现Wordpress...

    解析 .htaccess 文件 apache rewrite

    模块`mod_rewrite`是Apache的一个核心模块,它提供了URL重写和URL路由的能力,这对于创建SEO友好的伪静态URL、实现URL短链、隐藏真实路径等场景非常有用。在`.htaccess`文件中启用`mod_rewrite`模块,你需要开启...

    ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php

    ThinkPHP 支持通过 `.htaccess` 文件和 Apache 的 `mod_rewrite` 模块来实现 URL 重写,从而隐藏 URL 中的 `index.php` 入口文件,生成伪静态链接。以下是一系列详细的步骤来解释如何实现这一功能: 首先,了解 `....

    网站重写url伪静态工具

    ISAPI_Rewrite,ISAPI_Rewrite用来实现伪静态,将动态网页通过重写URL的方法实现去掉动态网页的参数!它的行为是像Apache的mod_Rewrite ,但专为微软的Internet信息服务( IIS )。 IIS配置相当简单,配置好之后就有...

    htaccess实现伪静态方法.docx

    HTAccess实现伪静态方法是指通过配置Apache服务器的Rewrite模块和编写.htaccess文件来实现URL重写,从而达到伪静态化的效果。伪静态方法与真静态方法不同,伪静态方法只是在URL处理了一下,而没有生成真正的静态文件...

    DedeCMS伪静态配置.zip_QI1_U6Z_dedecms_伪静态

    不过,需要注意的是,不同的服务器环境可能对伪静态支持情况不同,配置时要根据实际情况进行调整。 总之,DedeCMS的伪静态配置是一项对网站优化至关重要的工作,需要细心操作并根据服务器环境进行适配。只有正确...

    Apress.The.Definitive.Guide.to.Apache.mod.rewrite.Feb.2006.pdf

    《Apache mod_rewrite 权威指南》是一本由 Rich Bowen 编写的专业书籍,于2006年2月出版,该书系统地介绍了 Apache 的 mod_rewrite 模块,这是一个用于 URL 重写的重要工具,广泛应用于网站管理和优化、SEO 以及网站...

    ISAPI_Rewrite3_0075 注册版

    ISAPI_Rewrite是Helicon Technologies公司开发的产品,它扩展了Internet Information Services (IIS) 的功能,使其能够支持类似于Apache服务器上的mod_rewrite模块的URL重写规则。 ISAPI_Rewrite 3 是该系列的第三...

    apache伪静态实现

    Apache 伪静态是一种技术,它...总的来说,Apache 伪静态通过 mod_rewrite 模块实现 URL 重写,优化了网站结构,增强了用户体验和SEO效果。正确配置和使用伪静态技术对于任何动态网站来说都是一个值得采纳的最佳实践。

    htaccess伪静态规则下载

    `.htaccess.txt`文件很可能包含了这些具体的伪静态规则,你可以将这些规则复制到你的Zencart站点的根目录下的.htaccess文件中,然后根据需要调整以适应你的网站结构和需求。在应用这些规则之前,一定要备份原有的....

    ECSHOP 伪静态rewrite3 组件

    2. mod_rewrite模块:在Apache服务器中,mod_rewrite是用于URL重写的重要模块,它可以将用户的请求进行转换,使得动态URL看起来像是静态的。在ECSHOP的伪静态实现中,mod_rewrite起到了核心作用。 3. rewrite3组件...

    php-rewrite网站伪静态测试文件

    在网站开发中,"php-rewrite网站伪静态测试文件"是一个关键的概念,它涉及到Web服务器配置、URL重写以及PHP编程技术。这个标题所指的测试文件主要用于检测服务器环境是否支持使用PHP的mod_rewrite模块来实现伪静态...

    rewrite_amd64_zh-CN.zip

    4. **Apache mod_rewrite**:如果是Apache服务器,用户需熟悉mod_rewrite模块的配置,包括`.htaccess`文件的编辑和`RewriteEngine`, `RewriteRule`等指令的使用。 5. **64位系统兼容性**:确保软件能在64位操作系统...

    Rewrite.dll - 伪静态

    在IT行业中,Rewrite.dll与PHP的Rewrite模块密切相关,主要涉及到网站的URL重写技术,也就是我们常说的“伪静态”。这个技术主要用于优化网站的搜索引擎优化(SEO)和提高用户体验。下面将详细阐述这个话题。 伪...

Global site tag (gtag.js) - Google Analytics