我一直发现,在Web应用程序中定义其他“页面”的URL看起来既脆弱又脆弱或臃肿。
E.g。您有一个管理客户,销售,潜在客户的应用程序,因此有以下“页面”。
随着应用程序的增长,页面数量会立即增长到包含100多个URL的列表。
逻辑说,只需在页面上需要的地方复制/粘贴这些URL很难看并且很难维护,但如果在“this”页面上只需要2或3个,那么加载100多个键/值似乎是多余的
从技术上讲,这是一个与语言无关(ASP,JSP,PHP,RoR,Python等)的问题,但我打算用PHP实现(在MVC设置中)。但是,如果ASP.Net或Rails有一种“非常酷”的方式,那么我就是耳朵。
更新
我正在将非MVC PHP应用程序转换为使用MVC结构。以前我有一大组密钥链接,它们是页面的基本URL,例如:
$URLs['CUSTOMER_ORDER_CONTACTS'] = '/customerordercontacts.php';
$URLs['CUSTOMER_PRODUCTS_EDIT'] = '/editcustomerproducts.php';
//etc.
由于我可能从任何地方链接到“客户产品编辑”屏幕,因此每个页面都会加载此列表,以便在/当URL更改为另一个页面时...更改列表中的项目将更新所有链接。
然而,当我在这里阅读答案时,我想我可能会偶然回答我自己的问题。 @Blixt所写的内容几乎就是我/计划遵循的结构......此时,网址实际上是 结构化 ,其中我不喜欢根本不需要这个列表:
示例:如果我正在呈现客户......并希望提供指向每个联系人的链接
//pseudo code
$contacts = $customer.getContacts();
//previous rendering list of links
foreach($contacts as $key => $value){
echo('<a href="'.$URLs['CUSTOMER_CONTACT_VIEW'].'?customer='.$custID.'&contact='.$key.'">'.$value.'</a>');
}
//new rendering list of links
foreach($contacts as $key => $value){
echo('<a href="/customer/'.$custID.'/contact/'.$key.'">'.$value.'</a>');
}
答案 0 :(得分:1)
我希望尽可能保持URL的逻辑性,并避免使用特定于框架的URL(考虑到将来可能会更改框架,然后必须继续使用旧的URL模式以避免破坏外部链接。)
基本上:
# All customers:
/customers/
# New customer:
/customers/new
/customers/?new # another version if you don't think "new" deserves its own path
# Existing customer:
/customers/123/
/customers/123 # another version if you want the concept that it's a page, not a
# directory
# Edit customer:
/customers/123/edit
/customers/123?edit
# Some sub-list for a customer:
/customers/123/orders/
# and so on...
老实说,在我提供两个例子的情况下,我个人更喜欢第二个例子。它使用文件系统中的概念,列出的是“目录”,单独的条目是“文件”。每条路径代表某种数据,其他路径使用查询字符串(/customers/?new
)分隔。
在确定了URL结构后,您应该了解如何在Web框架中实现此功能。我认为“好”的大多数框架都对映射URL有某种支持(通常使用支持通配符的某种模式,例如正则表达式。)所以你的模式可能看起来像这样,使用我的第二个例子(正则表达式):
^/customers/$ -> CustomerList
^/customers/(\d+)$ -> Customer # This will check the query string for "edit" etc
# to determine which mode to use.
^/customers/(\d+)/orders/$ -> OrderList
答案 1 :(得分:0)
在CodeIgniter(PHP)中,它们将URL映射到对象及其方法,即
/customers/list/3
会致电Customers->list('3')
。您足够灵活,可以根据单个URL的需要覆盖此行为。在我看来,这是一个非常好的方式。
Django(Python)允许你强制手动执行此操作。虽然这种尝试为您提供了最大的灵活性,通过正则表达式将URL映射到函数,但对于大型应用程序来说,它变得非常复杂。
也许这些方法有帮助。
干杯,
答案 2 :(得分:0)
PHP
中的我会选择这样一个简单的设置:
www.example.com/application/controller/action/parameter
,其中
application
必须是目录
controller
必须是其父级application
action
必须是控制器中的方法(默认)OR
可以是application->controller->action
下的另一个子目录,因为有时我需要将方法和实际文件分开。
然后,参数可以传递给有效的应用程序有效控制器有效动作
对我而言,这是我能实现的最动态的设置。
如果你喜欢现实世界的例子,请问我。
答案 3 :(得分:0)
网址结构应考虑搜索引擎优化。即使该站点仅在组织内部运行,它也可能被内部引擎抓取,或者将来某个时候。以下是我认为有用的2种Google资源的几个关键点:
来自http://www.google.com/webmasters/docs/search-engine-optimization-starter-guide.pdf:
使用网址中的字词 - 包含与您网站相关的字词的网址 内容和结构更友好 对于浏览您网站的访问者。 参观者更好地记住它们 可能更愿意链接到他们。
提供一个网址版本以访问文档 - 阻止用户 从链接到一个版本的URL 和其他人联系到不同的人 版本(这可能会拆分 这个内容之间的声誉 URL),专注于使用和引用 结构和内部的一个URL 链接你的网页。
来自http://www.google.com/support/webmasters/bin/answer.py?answer=76329:
网站的网址结构应尽可能简单。考虑一下 组织您的内容以便URL 在逻辑上和在一个 最容易理解的方式 人类(如果可能,可读的单词 而不是长ID号)。
请考虑在您的网址中使用标点符号。网址 http://www.example.com/green-dress.html 对我们来说比对我们更有用 http://www.example.com/greendress.html。 我们建议您使用连字符( - ) 而不是你的下划线(_) 网址。
过于复杂的网址,尤其是那些包含多个参数的网址 可能会导致抓取工具出现问题 创造不必要的高数量 指向相同或的URL 您网站上的类似内容。作为一个 结果,Googlebot可能消耗很多 带宽超过必要的带宽,或者可能 无法完全索引所有 您网站上的内容。