2013-10-28 55 views
2

我正在写一个脚本,将从URL中选择一个术语,并根据该术语从我的数据库中提取正确的数据。搜索引擎优化友好术语语法

到目前为止,我还添加了一行到我的.htaccess文件,将重写我的网址搜索引擎友好的格式,是这样的:

http://mydomain.com/catalogue/some-item-name 

在实际的PHP页面我们把这个变量,带破折号

$item= str_replace('-', ' ', $_GET['item']); 

并将项目与我的页面上的隐藏列表匹配,以便将匹配与jQuery进行匹配。

一切工作正常,除非我真的有项目名称短划线。我的脚本删除所有破折号。我应该:

  1. 将实际的破折号换成别的东西吗?
  2. 找到一个方法剥离一个短划线?

如果我是拉从DB我可能已经使用的术语WHERE LIKE“%$%项目”,而是因为我必须匹配确切期限alredy出现在我的HTML代码,我”项目米有点卡住了。

谢谢。

+0

大多数网站都像stackoverflow(检查URL),所以简而言之:'http://mydomain.com/catalogue/12345/some-item-nam',然后你只需引用ID(所以文本并不重要)。 – h2ooooooo

+1

为什么不将URI重写为'http:// mydomain.com/catalog/ID/some-item-name'并使用(数字)ID来获取项目?如果两个项目具有相同的名称(或在名称被重写后名称相同),这也可以工作。 – Reeno

+0

是的,我也在考虑这样做,但在我这样做之前,我想我会试图找出没有使用ID。 – santa

回答

1

我们使用一个系统来检查传入的URI与数据库的对应关系,并查看发送给用户的位置。这样,我们就可以将系统内部的URI(比如ID)完全分离出来。

我们将传入的URI与数据库中的uri字段进行匹配,并从正确的类(控制器)或重定向中加载正确的函数。它也可以选择向该功能发送参数。

让我通过实际案例

+---------+---------+----------+----------+--------+ 
| uri  | class | function | new_uri | vars | 
+---------+---------+----------+----------+--------+ 
| faq  | support | faq  |   |  | 
+---------+---------+----------+----------+--------+ 
| sandwich| content | news  |   | 1  | 
+---------+---------+----------+----------+--------+ 
| banana |   |   | sandwich |  | 
+---------+---------+----------+----------+--------+ 

案例1: 用户请求test.com/faq的URI路由器上找到URI =“常见问题解答”一根火柴,告诉系统diplay什么支持类或控制器显示中的faq()

案例2: 用户请求test.com/sandwich这是一个新闻故事与ID 1.快捷所以URI路由器发送一个呼叫news()在内容类,我们可以找回ID 1从一个变量如$_GET['vars'][0]

案例3: 用户请求test.com/banana,已经移动到test.com/sandwich因为我们在香蕉产业是不是了。所以URI路由器有礼貌地发送301并将用户重定向到正确的位置。

该方法有很多扩展的方法,例如,通过允许uri字段中的通配符等。希望它对您也有一定的价值。

+0

但是,如果我把我的物品当作$ item =“我的物品一”,而我可能匹配它的那个物品是:“我的物品一”,那么这对我有什么帮助? – santa

+0

那么,你将不得不为你想要的URL看起来做一些规则集。我已经决定剥离非单词字符并用短划线替换所有空格。所以我首先做一个初始替换,我用短划线和几个特殊字符替换空白,然后执行'preg_replace('/ [^ \ w - ]/i','',$ slug)''。结果是可读性很好的URI,只要规则不改变,就应该匹配。 – jurgemaister

相关问题