2010-01-03 120 views
0

我创造了我的网站一个新的URL的基础设施,以及过这样的问题来了:带参数的扩展名网址,404s是什么?

如果我有一个扩展名的URL像这样“/产品/饮料/薄荷巧克力,饮料/分销商”,我可以” t区分页面参数...
我可以通过查找页面中最长的匹配找出哪个页面被调用,并将其余的页面视为参数,但页面未找到的情况如何?

像“/ Prodcts/Beverages/Minty-chocolate-drink/Distributors”这样的URL(注意“Prodcts”中的拼写错误)不会抛出404,而是会映射到索引页面,并将所有URL作为参数!

现在,我可以用f.ex分割参数。 [页面]/p/[参数],但这很不方便,不太友好。

您是否看到另一个解决方案可以在第一个示例中保留该URL,但启用了一个未找到页面的方案?

回答

0

如果索引页无法处理参数,它也可能会抛出404,毕竟,这个URL没有独特的内容显示(即使它映射到一个页面,但是浏览器和用户不知道Products是一个参数而不是目录),所以404是完美的。

编辑:显然这会去的每一页,不仅为索引页:如果一个未知参数发现:404

+0

所以简而言之:让每个页面检查他们的参数,如果出现问题抛出一个404 ...这甚至可能工作。 – wagi 2010-01-03 12:49:14

+0

对,它的工作原理。一直这样做;-)显示不同的网址相同的内容是不是很SEO :) – 2010-01-03 18:17:43

+0

嗯,根据slebetmans回答一个更多的问题回答:当有效的参数有效页面相同的值时,我该怎么办?我可以提供页面或者只是抛出一个500错误,但如果它发生的话,这将是一个调试噩梦的地狱...... – wagi 2010-01-04 10:43:06

0

为什么你必须将无效的URL请求映射到索引页面,而不是将其重定向到专用的错误页面?规则会更简单

0

歧义是不是一个好主意。你可能最好分离runmodes形式参数:

/Products/Beverages/Minty-chocolate-drink?get=distributors 
+0

这难道不简单吗?如果我坚持使用.aspx和有这样的URL:“产品。ASPX /饮料/薄荷巧克力,饮料/分销商” – wagi 2010-01-03 12:51:14

0

我不确定这是否会工作,更不用说为你。

您可以使用$_SERVER["REQUEST_URI"];将返回/产品/饮料/薄荷巧克力饮料/分销商

然后用它分解爆炸:

$para = explode("/", $_SERVER["REQUEST_URI"]); 

,这将给你:

Array 
(
    [0] => 
    [1] => Products 
    [2] => Beverages 
    [3] => Minty-chocolate-drink 
    [4] => Distributors 
) 

希望从这里你可以看到我要去的地方。我也是从一个答案来到这里的,所以这可能不是最好的解决方法。