URL路由:处理空间和非法符当建立友好Url
题
我见过很多的讨论网址的路由和许多很好的建议...但在现实世界中,有一件事我还没有看到讨论的有:
- 创建友好的网址 与的空间和非法的人物
- 查询数据库
说你是建立一个医疗站,这已 文章 与 类别 和任择 子类别.(1至多)。( 可能已经使用的任何例子,但医疗领域具有很长的词)
例类别/子/条的结构:
- 你一般健康状况(职类)
- 自然健康 (子类)
- 你的身体的免疫系统和它为什么需要帮助。 (篇文章)
- 是的植物和草药,真正的解决方案吗?
- 我应该吃强化食品?
- 顺势疗法药物
- 什么样的顺势疗法药吗?
- 健康饮食
- 你应该喝10杯咖啡每天?
- 有机蔬菜值得吗?
- 是的汉堡王®邪恶的?
- 是"法语咖啡"或美国咖啡更健康?
- 自然健康 (子类)
- 疾病和条件(职类)
- 自动免疫疾病 (子类)
- #1的杀手的人是某些病
- 如何得到帮助
- 遗传条件
- 预防脊柱裂之前怀孕。
- 你是倾向于生活较长时间?
- 自动免疫疾病 (子类)
- 博士FooBar的个人的建议(分类)
- 我的想法药和自然疗法 (第-没有子类)
- 你为什么要关心你的健康?
- 这是可以吃的权利,并有一个良好的饮食。
- 已经不流血的手术来的年龄吗?
在一个结构喜欢这个,你要有一些 LOOONG网址 如果你去:/{类别}/{子类别}/{文章标题}
此外,还有许多 非法符, 像#!?'é",等等。
因此,问题(S):
- 你会如何处理非法的人物和空间?(优点和缺点?)
- 你会处理得到这个从数据库
- 换句话说,你会 信任数据库找到的 该项目,通过标题, 或者把所有的标题 并找到钥匙在代码中获得的关键要通过数据库(两个电话数据库)?
注:我总是看到好漂亮的例子,如/products/饮料/短的产品名称/怎么样处理一些丑陋的例子^_^
解决方案
我自己喜欢_到为便于阅读,原因(你把一个强调和 _
's几乎go_away),如果你要带的空间。
你可能想试试铸造扩展的字符,即ü,靠近-ascii equivelants如有可能,即:
u->u
然而,在我经历的最大问题 实际 SEO有关的问题,是不是,网址中包含的所有可爱的文本,其,当人们 改变 该文本链接,所有的搜索引擎优化工作转向废话因为你现在有 DEADLINKS 在索引。
为此,我建议计算器什么这样做,并有一个数字的一部分引用了恒定的实体,并且完全忽略其他的文本(和/或更新它的时候它是错误)
此外,严重hericichial性只是使得不良的可用性的人类。人 恨 长期的网址。复制贴他们吮吸他们只是更容易受到破坏。如果你可以细分到下teirs,即
/article/1/Some_Article_Title_Here
/article/1/Section/5/Section_Title_Here
/section/19023/Section_Title_here ( == above link )
这种方式的只有时你需要做的,巫术是当编号的条实际上 已 被删除,在这段时间,你使用文本的一部分,作为一个搜索字符串尝试找到真正的文章或类似的东西。
其他提示
我的最后一个做法是:
- 把所有"奇怪的字母"到"正常字母"->à,n n,等等。
- 把所有非字符_(i。e不a-zA-Z0-9)
- 替换组强调与单一的强调
- 删除所有尾矿和领导突出了
至于储存,我相信友好的URL应该去的数据库,并且以不可变的,毕竟 酷Uri不要改变
解决方案2是典型的方法的那些...一些改进是可能的,例如。转撇到什么,而不是一个破折号,可读性。通常你将要存储换器给糟蹋-对-URL-有效版本的标题数据库以及"真正"的标题,这样你可以选择的项目使用索引的选择在哪里。
然而。没有实际非法的字在一个网址路径的一部分,只要为你编码。例如一个空间,哈希或削减可以被编码占20,%或23%2F。这种方法有可能进行编码 任何 串成URL的一部分,所以你可以选择回去的数据库,通过实际的、不变的标题。
有几个潜在的问题,这取决于你的网的框架。例如任何基于CGI将无法之间的差别编码%2F和现实,以及一些框架/部署可能有困难Unicode符。
或者,一个简单的和安全的解决方案是包括主要的关键的网址,使用了标题件纯粹是为了使地址更好。例如:
http://www.example.com/x/category-name/subcat-name/article-name/348254863
这是如何。亚马逊做的。它的确有的优点是可以更改标题的数据库和有旧的标题自动重新定向到新的。
在情况下,有人有兴趣。这是路线(哦...一语双关),我把:
Route r = new Route("{country}/{lang}/Article/{id}/{title}/", new NFRouteHandler("OneArticle"));
Route r2 = new Route("{country}/{lang}/Section/{id}-{subid}/{title}/", new NFRouteHandler("ArticlesInSubcategory"));
Route r3 = new Route("{country}/{lang}/Section/{id}/{title}/", new NFRouteHandler("ArticlesByCategory"));
这为我提供能力做到的网址如下所示:
- site.com/ca/en/Article/123/my-life-and-health
- site.com/ca/en/Section/12-3/Health-Issues
- site.com/ca/en/Section/12/
在清洁的网址,这里有一个方法我是用来替代饰字:
private static string anglicized(this string urlpart) {
string before = "àÀâÂäÄáÁéÉèÈêÊëËìÌîÎïÏòÒôÔöÖùÙûÛüÜçÇ’ñ";
string after = "aAaAaAaAeEeEeEeEiIiIiIoOoOoOuUuUuUcC'n";
string cleaned = urlpart;
for (int i = 0; i < avantConversion.Length; i++ ) {
cleaned = Regex.Replace(urlpart, before[i].ToString(), after[i].ToString());
}
return cleaned;
// Here's some for Spanish : ÁÉÍÑÓÚÜ¡¿áéíñóúü"
}
不知道如果这是最有效的Regex,但它肯定是有效的。这是一个扩展方法以这么叫你只是把该方法,在一个静态的类和财产以后做这样的:
string articleTitle = "My Article about café and the letters àâäá";
string cleaned = articleTitle.anglicized();
// replace spaces with dashes
cleaned = Regex.Replace( cleaned, "[^A-Za-z0-9- ]", "");
// strip all illegal characters like punctuation
cleaned = Regex.Replace( cleaned, " +", "-").ToLower();
// returns "my-article-about-cafe-and-the-letters-aaaa"
当然,你可以结合成一种方法称为"CleanUrl"或什么的但是这是给你的。
作为后续行动。我有一些想法。可以随意发表评论意见或得到自己的问题的答案:
方案#1:替换所有非法符的破折号:
- www.mysite.com/diseases---conditions/Auto-immune-disorders/the--1-killer-of-people-is-some-disease/
看起来有点丑陋到我...
方案#2:带非法人物和替换空间的单个破折号:
- www.mysite.com/diseases-conditions/Auto-immune-disorders/the-1-killer-of-people-is-some-disease/
方案#3适用一些规则来替换某些人物有的话:
- www.mysite.com/diseases-and-conditions/Auto-immune-disorders/the-number1-killer-of-people-is-some-disease/
方案第4条的所有空间和使用的资本化
- www.mysite.com/DiseasesAndConditions/AutoImmuneDisorders/TheNumber1KillerOfPeopleIsSomeDisease/
(不可能的工作以及在情况敏感的服务器和很难阅读)
解决方案2将我的建议。我不是世界上最大的搜索引擎优化专家,但我相信这是相当多的'标准'方式得到良好的排名。
我做什么正常是仅允许法律性质并保持友好的网址尽可能短。同样重要的是,友好的Url通常插入的人,我从来没有产生一个友好的网址从标题或内容,然后使用这一查询的数据库。我会用一个列表中的,例如friendly_url,使网站管理员可以插入友好的网址。
我解决了这个问题通过添加额外的列的数据库(e。g:UrlTitle一起标题的列)和节能标题剥夺了所有非法的人物与'&'符号替换为"和",以及空间取代通过下划线。然后你就可以查找通过UrlTitle和使用真正的一页的标题或任何地方。
我建议做的是什么形式带出小说和replce非法符的破折号(最长1个破折号)然后让用户正确的网址,如果他们想要的。它更好的搜索引擎优化使URL配置。
作为一个客户,不是一个网页设计,我发现的火狐有时休息URL当它试图取代"非法"字与可用的。例如,FF替换~与%7E。这永远不会载我。我不能理解为什么HTML编辑和浏览器不仅仅同意不接受符的其它于A-Z and0-9.如果某些脚本需要%,?, 这些更改脚本应用程序,以便他们将与阿尔法数字。