php怎么实现类似segmentfault 的url重写?
php怎么实现类似segmentfault 的url重写?
2个步骤可以实现。
1.通过APACHE或者nginx或者IIS将真实地址变为伪静态地址,让伪静态地址能够访问;
2.通过程序正则的方法将html元素中的a标记href提取出来,将其伪静态,然后配合第一步便可实现。
实现方法如:
//将页面内容放入缓冲区 $content = ob_get_contents(); //进行正则匹配 $content = preg_replace( array("/\<a href array obclean echo><p>上面的正则变为你自己的,替换也变为自己的。。。。</p> <p class="answer fmt" data-id="1020000000135750"> </p> <p>1.直接通过nginx或者apache的rewrite实现伪静态。<br> 2.一般框架如CI,thinkphp都有程序单一入口(pathinfo):index.php<br> 一般的URL:<strong>http: //localhost/project/index.php/news/1001</strong><br> 我们可以通过用nginx或者apache的rewrite 将URL的index.php隐藏达到重写的目的,简单方便。</p> <p class="answer fmt" data-id="1020000000136013"> </p> <p>大体来说有两种实现方式:</p> <ol> <li>webserver中配置重写规则,比如在apache中启用mod_rewrite,在nginx中使用rewrite指令;</li> <li>数字列表单入口的应用中进行路由分发,多见于成熟的MVC框架,比如cakephp,不过这中需要webserver配置的辅助;</li> </ol> <p class="answer fmt" data-id="1020000000138949"> </p> <p><cite>以下文章由360weboy撰写, 原文地址:结合Mod Rewrite以及PHP生成优化的SEO url。 360weboy – 专注php web开发, web前端开发, 打造专业的php社区。希望本篇文章对你有所帮助,感兴趣的话可以加入360weboy的qq群-197642724,或者关注360weboy的新浪或者腾讯微博,大家在一起分享讨论开发中的技术以及思想,如发现文章有什么不对之处,请在评论中及时指出,如果确实有问题,我会及时纠正。</cite></p> <p>虽然我不是一个专业的做seo优化的,但是在我接触到的一些项目中,知道了一些实现seo的方法。要生成对于用户以及搜索引擎友好的url链接,据我目前所了解的有两种方式:</p> <p>1. 结合Mod Rewrite以及PHP生成优化的SEO url</p> <p>2. 在应用程序的前端控制器中通过路由来解析seo化的url,然后再将请求分发(dispatch)到具体的针对此次请求的控制器中进行处理</p> <p>这边文章主要介绍 – 结合Mod Rewrite以及PHP生成优化的SEO url的方式。对于动态网站来说,静态化的url比较有利于搜索引擎收录,是站点seo比较重要的一部分。</p> <p>首先让我们来看一个搜索引擎比较讨厌的常规的url – http://www.yoursite.com/product.php?p...</p> <p>很明显,当用户看像以上的一个url的时候,根本弄不清楚当前在看那个产品的信息。所以,我们有必要将改url转变为以下形式的链接:</p> <p>http://www.yoursite.com/product/13/3/...</p> <p>用户看到以上的url的时候,至少可以知道当前看的产品是2GB的MP3播放器。我们使用Apache Mod Rewrite就可以实现上述url的转变。</p> <p>我常常将这个转变过程概括为: 正在找什么以及要到哪去。</p> <p><strong>什么是Mod Rewrite?</strong></p> <p>维基百科上的解释如下:</p> <blockquote>URL重写 (URL Rewriting) 是一种REST的相关技术,它可以在 Web Server 中,针对用户所提供的 URL 进行转换后,再传入 Web Server 中的程序处理器。</blockquote> <p>示例</p> <p>最常见的用法,就是将一组 URL 层次结构字符串,转换成带有 query string 的 URL,或是反向转换,例如:<br> http://www.somebloghost.com/Blogs/Pos...<br> 经过 URL 重写后,可以变成:<br> http://www.somebloghost.com/Blogs/200...<br> 另一个例子,下面的 URL:<br> http://www.somehost.com/Blogs/2006/12...<br> 经过 URL 重写后,可转换成:<br> http://www.somehost.com/Blogs.aspx?ye...</p> <p>因此,用户可以使用较直接的方式来输入 URL(这也是 REST 的主要目的),是搜索引擎优化(SEO)的作法之一。而应用程序开发者可以利用这个机制来将参数隐藏起来,可避免让网络上的恶意用户收集到有利于发动攻击的信息。</p> <p>我个人的理解就是,在用户通过一个url访问你的程序的时候,web服务器会检查这个请求的链接是否符合一定的转换规则,并且根据规则的定义对该url进行转换。这意味着,请求最终还是product.php进行处理,但是用户或者搜索引擎看到的是完全不同的url。</p> <p><strong>重写URL的步骤</strong></p> <p>目前为止, 我们已经明白了什么是Mod Rewrite。接下来,我们来具体学习下如何进行重写url。第一步就是要创建一个.htaccess的文件并且将该文件放在你站点的根目录下(只适用于Linux的web服务器,对于win类型的貌似是不起作用的)。 接着,你需要在.htaccess加入下述代码:</p> <pre class="brush:php;toolbar:false">RewriteEngine on RewriteRule ^article/([0-9]+)/([0-9]+)/(.*?).html$ /article.php?articleid=$1&categoryid=$2
我们来看下这两行代码具体什么意思。
RewriteEngine on
第一行代码告诉web服务器需要重写url, 不然服务器会抛出404错误。在你指定重写规则时,千万别忘了先加这行代码。
RewriteRule ^product/([0-9]+)/([0-9]+)/(.*?).html$ /product.php?productid=$1&categoryid=$2
第二行代码分为两部分: 第一个部分为一个正则表达式, 第二个部分为一个动态的url。 这两个部分结合起来告诉web服务器, 当解析的url符合规则 – ^product/([0-9]+)/([0-9]+)/(.*?).html$,那么将请求导向到/product.php?productid=$1&categoryid=$2。 就像我前面提到的,我把第一个部分理解正在找什么, 第二个部分理解为要到哪去。
第一部分 – 正在找什么?
上述的正则表达式就是定义了正在找什么。 让我们来把整个正则表达式分隔一下,将各个部分与我们一开始提到的url – http://www.yoursite.com/product/13/3/...:
1. ^product/告诉web服务器,视图匹配的url必须以product/这个字符串开头。这与url中的product/匹配。
2. 接下来的([0-9]+)告诉web服务器在/后面紧跟的是0-9之间的数字,该数字至少出现一次, 也就3. 是匹配的productid。 例如这个productid可以是1, 20, 567等等。
4. 继续匹配/, 然后又是一个([0-9]+), 道理一样,用来匹配categoryid
5. 继续匹配/, (.*?).html匹配任何以.html为后缀名,由任何数字或者字符为前缀
6. 最后,$表示匹配匹配字符串结尾
第二部分 – 到哪去?
这个就不用讲了,常规的动态url的解析。
好了,就是这么简单,至于怎么用php将项目中的url以seo化形式输出,相信大家都知道怎么做,就不写了。
以上文章由360weboy撰写, 原文地址:结合Mod Rewrite以及PHP生成优化的SEO url。 360weboy – 专注php web开发以及web前端开发, 努力打造专业的php社区。希望本篇文章对你有所帮助,感兴趣的话可以加入360weboy的qq群-197642724,或者关注360weboy的新浪或者腾讯微博,大家在一起分享讨论开发中的技术以及思想,如发现文章有什么不对之处,请在评论中及时指出,如果确实有问题,我会及时纠正。