Home  >  Article  >  Backend Development  >  php怎么实现类似segmentfault 的url重写?

php怎么实现类似segmentfault 的url重写?

WBOY
WBOYOriginal
2016-06-06 20:51:301132browse

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的新浪或者腾讯微博,大家在一起分享讨论开发中的技术以及思想,如发现文章有什么不对之处,请在评论中及时指出,如果确实有问题,我会及时纠正。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn