如何将查询参数mod_rewrite到路径文件夹名称?

时间:2013-05-09 22:45:27

标签: url mod-rewrite url-rewriting seo query-parameters

我正在使用url-rewriting执行我的第一步,但无法使用以下内容:

在我的应用程序中,可以通过将查询参数?skin=some_id应用于应用程序中的任何页面来加载外观。我想改变:

 http://www.mysite.com/anypage.html?skin=123

成:

 http://www.mysite.com/123/anypage.html

但我无法让它发挥作用。

这是我目前在httpd.conf

中的内容
<IfModule mod_rewrite.c>
    RRewriteRule (.*)/(.*)?app=(.*)$ %1/%3/%2 [NC,R=301,L]
</IfModule>

问题:
这不行,所以我想知道我做错了什么?

使用URL时,用户输入的URL是多少? http://www.mysite.com/123/anypage.html“映射”到http://www.mysite.com/anypage.html?skin=123

如果我想访问查询参数,是否必须从实际网址(?skin=...)或重写的网址中提取它?

感谢您的帮助!

修改
所以我有点像这样做(有用的测试人员here):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} skin=(\w+)
RewriteRule ^.*\.html /%1? [R=301]
</IfModule>

这将重定向:

 www.some.com/index.html?skin=xyz   =>  www.some.com/xyz

还没有。

1 个答案:

答案 0 :(得分:1)

我建议以不同的方式为您的应用设置皮肤。您现在拥有它的方式会给搜索引擎带来重复的内容问题,因为他们会为您拥有的每个皮肤看到网站上每个网页的相同内容。

也就是说,yoursite.com/dark/about.htmlyoursite.com/spring/about.html的内容相同,因此搜索引擎可能很难决定使用哪个版本。此外,它似乎会为链接到您网站上的其他页面创建额外的工作,因为您必须以编程方式创建链接以使用正确的路径和皮肤。

我只有一个用于激活皮肤的URL并将其偏好存储在cookie或会话中,并根据cookie /会话值为站点设置皮肤,并且只维护一组URL。

除非你真的希望皮肤在URL中,否则我会回避使用URL或查询字符串来指示要使用的皮肤。取而代之的是附加到帐户或存储在cookie中的首选项。