我有一个以php开头的电子商务网站,并已迁移到asp.net。
我发现,除非我对我的设计师非常具体,否则我想要发生的变化不会。
驱使我NUTS的一件事是非常长的网址。例如,来自以下层次结构的类别页面: 产妇和护理服装 - 孕妇裤&牛仔裤 - 孕妇牛仔裤 返回www.exampledomain.com/store/category/maternity%20and%20nursing%20clothing/maternity%20pants%20&%20jeans/maternity%20jeans.aspx的网址!来吧!
设计师正在努力用连字符替换空间......虽然他在那里,有没有办法让他告诉他们这些网址更加用户友好?有没有办法跳过除最终产品类别之外的所有东西?那么,www.exampledomain.com / maternity-jeans.aspx?
为了更容易,我应该删除层次结构,直接从主页上获得最终类别?我不想这样做,因为有很多子类别,没有比这个例子更深的了。
任何建议都会受到热烈欢迎。正如我所说,如果我不对我的设计师说,这就是我想要的,这就是我认为你这样做的方式我被刷掉了 - 由于一些原因我暂时坚持使用它们。
答案 0 :(得分:0)
我个人会使用涉及字符数量最少的网址结构,例如:
http://www.example.com/maternity-jeans
这不仅是干净的,它对SEO更好,因为有更少的无用的词,如“商店”和“类别”。它的安全性稍微好一点,因为它并不能说明你的站点是建立在ASP.NET上的。
要实现此URL结构,我通常会选择使用Helicon ISAPI rewrite,如果您使用的是专用服务器,则可以使用免费版本,否则需要支付99美元。< / p>
另一种替代方法是使用IIS Url重写,您需要运行IIS 7及更高版本才能使用这些。
我假设您有一个所有类别加载的类别页面?对于下面的示例,我将其称为“category.aspx”。
下面的这两条规则将捕获类别的名称并将其作为“category.aspx”页面的查询字符串参数传递,然后您可以使用该参数查询数据库并呈现页面。
Helicon ISAPI:
RewriteRule ^/(.*)$ /category.aspx?name=$1 [L]
IIS Url重写:
<rule name="Category" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="category.aspx?name={R:1}" />
</rule>
虽然上述网址结构是我的偏好,但您可能需要考虑网站上其他网页的网址。上述规则将采用任何URL并假设它是一个类别,显然并非所有URL都是类别。
在这种情况下,您有几个选项,您可以包含一个唯一的单词或字符来标识它是一个类别,例如:
http://www.example.com/c/maternity-jeans
这会改变你的重写:
Helicon ISAPI:
RewriteRule ^/c/(.*)$ /category.aspx?name=$1 [L]
IIS Url重写:
<rule name="Category" stopProcessing="true">
<match url="c/(.*)" />
<action type="Rewrite" url="category.aspx?name={R:1}" />
</rule>
或者,您可以通过网站上的脚本运行每个页面,该脚本可以根据URL确定您正在查看的页面类型,然后呈现相应的内容。
这在很大程度上取决于您的网站目前的工作方式,以及您是否准备进行更改。