0

我有一个以 php 开始并已迁移到 asp.net 的电子商务网站。

我发现除非我对我的设计师非常具体,否则我想要发生的变化不会。

让我疯狂的一件事是非常长的网址。例如,来自以下层次结构的类别页面:孕妇和护理服装 - 孕妇裤和牛仔裤 - 孕妇牛仔裤返回 www.exampledomain.com/store/ 的 URL category/maternity%20and%20nursing%20clothing/maternity%20pants%20&%20jeans/maternity%20jeans.aspx!来吧!

设计师正在努力用连字符替换空格......当他在那里时,有没有一种方法可以让他让这些 url 对用户更友好?有没有办法跳过除了最终产品类别之外的所有内容?那么,www.exampledomain.com/maternity-jeans.aspx?

为了更容易,我应该删除层次结构并直接从主页获得最终类别吗?我不想这样做,因为有很多子类别,没有比这个例子更深的了。

任何建议都会受到热烈欢迎。正如我所说,如果我不对我的设计师说,这就是我想要的,这就是我认为你这样做的方式,我会被拒之门外——由于几个原因,我暂时被他们困住了。

4

1 回答 1

0

我个人会使用包含最少字符的 URL 结构,例如:

http://www.example.com/maternity-jeans

这不仅干净,而且对 SEO 更有利,因为“商店”和“类别”之类的无用词越来越少。它的安全性也稍好一些,因为它不会让人明显看出您的站点是基于 ASP.NET 构建的。

为了实现这种 URL 结构,我通常会选择使用Helicon ISAPI rewrite,如果您在专用服务器上,您可能可以使用免费版本,否则需要 99 美元的费用。

另一种选择是使用 IIS Url 重写,您需要运行 IIS 7 及更高版本才能使用这些。

我假设您有一个所有类别都加载的类别页面?对于下面的示例,我将其称为“category.aspx”。

下面的这 2 条规则将捕获类别的名称并将其作为“category.aspx”页面的查询字符串参数传递,然后您可以使用它来查询数据库并呈现页面。

螺旋ISAPI:

RewriteRule ^/(.*)$            /category.aspx?name=$1 [L]

IIS 网址重写:

<rule name="Category" stopProcessing="true">
    <match url="(.*)" />
    <action type="Rewrite" url="category.aspx?name={R:1}" />
</rule>

尽管上述 URL 结构是我的首选,但您可能必须考虑您网站上其他页面的 URL。上述规则将采用任何 URL 并假定它是一个类别,显然并非所有 URL 都是类别。

在这种情况下,您有几个选项,您可以包含一个唯一的单词或字符来标识它是一个类别,例如:

http://www.example.com/c/maternity-jeans

这会改变你的重写:

螺旋ISAPI:

RewriteRule ^/c/(.*)$            /category.aspx?name=$1 [L]

IIS 网址重写:

<rule name="Category" stopProcessing="true">
    <match url="c/(.*)" />
    <action type="Rewrite" url="category.aspx?name={R:1}" />
</rule>

或者,您可以通过网站上的脚本运行每个页面,该脚本会根据 URL 确定您正在查看的页面类型,然后呈现适当的内容。

这在很大程度上取决于您的网站目前的工作方式以及您是否准备好进行更改。

于 2012-04-22T11:05:03.887 回答