【问题标题】:How to mod_rewrite a query parameter to a path folder name?如何将查询参数修改为路径文件夹名称?
【发布时间】:2013-05-04 13:20:53
【问题描述】:

我正在使用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

如果我想访问查询参数,我必须从实际 url (?skin=...) 中提取它还是从重写后的 URL 中提取它?

感谢您的帮助!

编辑:
所以我让它像这样工作(有用的测试员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

还没有。

【问题讨论】:

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


    【解决方案1】:

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

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

    我只需要一个用于激活皮肤的 URL,并将他们的偏好存储在 cookie 或会话中,然后根据 cookie/会话值对站点进行皮肤设置,并且只维护一组 URL。

    除非您真的希望皮肤位于 URL 中,否则我会避免使用 URL 或查询字符串来指示要使用的皮肤。而是将其作为附加到帐户或存储在 cookie 中的首选项。

    【讨论】:

    • 嗯。好点。现在我使用?skin=123 触发了一个皮肤,但我对它并不满意,而且文件夹变体似乎值得探索。我将皮肤(和配置)附加到服务器端帐户,并将其存储在 cookie 中。问题是如果所有用户都有相同的www.mysite.com 链接,他们想通过该链接访问他们的皮肤,如果不是通过 url,我必须在登录之前加载皮肤或设置 cookie 是什么意思?
    • 我会使用 cookie 来保存皮肤,并将其存储在他们的帐户中。这样,如果他们登录并选择皮肤,您就可以使用偏好设置 cookie。然后当他们注销时,cookie 仍然存在,所以下次他们回来时,您可以使用 cookie 中的皮肤。要设置 cookie,您可以有一个 PHP 文件,例如 setskin.php,当像 setskin.php?skin=dark 这样调用时,脚本会设置 cookie,并可选择更新其帐户设置并重定向回上一页。这有意义吗?
    • more or less :-) 最后一个问题:如果皮肤与登录的用户无关,而是与访问www.mysite.com 的页面有关怎么办?因此,如果用户直接访问该站点,则会加载默认皮肤,但如果他来自www.abc.com,则加载皮肤abc?目前,我正在这样做 = abc 上的链接将是 www.mysite.com/index.html?app=abc,它将加载适当的皮肤。
    • 在这种情况下,您可以使用一些全局代码来识别您站点的任何 URL 上的 app=abc,而不是使用 setskin.php 脚本。然后您仍然可以设置 cookie 并在代码中设置选项以在初始请求中使用该皮肤。您还可以使用 mod_rewrite 并使用 URL 中的皮肤检测对您网站的任何请求,将其重写为 setskin.php?skin=blah&url=url_they_landed_on,然后将 setskin.php 重定向到 url,如果该 URL 是在您的域上。
    • 我现在正在考虑您的建议,并尝试重写一些更好的网址。感谢您的所有意见!
    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2020-08-22
    • 2023-01-11
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多