【问题标题】:.htaccess | Rewrites with pages.htaccess |用页面重写
【发布时间】:2014-03-03 19:25:51
【问题描述】:

因此,我正在调整我正在开发的网站上的 URL,但在 URL 中传递了几个变量时遇到了一些问题。

mylighting.com/bath-fixture-c-13.html?osCsid=u2qj8o9rvjn0p5pa7p8npuhs54
RewriteRule ^bath-fixture bath-fixture-c-13.html?id=$1

所以这个重写工作完美,因为出现的页面是mylighting.com/bath-fixture

现在不幸的是,在该页面上还有其他几个项目要查看,我在使用 page 变量时遇到了一些问题。我认为我的代码是正确的,但每次我尝试转到正确的页面时,它似乎都不起作用。

http://mylighting.com/bath-fixture-c-13.html?page=2&id=u0hnumfus6gjhjc45av36663m3
RewriteRule ^bath-fixture/([a-zA-Z0-9]+)$ bath-fixture-c-13.html?page=$1&id=$2

所以我认为我的说法是正确的,但显然不是。我希望输出是 mylighting.com/bath-fixture/2 第二页。

不幸的是,在 .htaccess 中使用该代码时,每次我输入该 URL 时,它都会将我带到该类别的第一页,而不是应有的第二页。

【问题讨论】:

  • 你想在浏览器中看到什么 URL,你想在内部重写成什么?
  • 我想在浏览器中看到 mylighting.com/bath-fixture/2 作为输出。
  • 根据您下面的 cmets 和上面的陈述,您希望使用 mylighting.com/bath-fixture/2 作为输入并具有 mylighting.com/bath-fixture-c- 的内容13.html?id= 服务,没有重定向。

标签: regex .htaccess url rewrite


【解决方案1】:

您似乎误解了 RewriteRule 的格式。第一个是意外工作。

RewriteCond %{QUERY_STRING}  page=([0-9]+)
RewriteRule ^bath-fixture-c-13.html bath-fixture/%1 [R=301,QSA,L]
RewriteRule ^bath-fixture-c-13.html bath-fixture/ [R=301,QSA,L]

RewriteRule 的第一个参数是匹配请求 URL 的正则表达式。第二个参数是作为重定向发送给用户的 URL,因此它们最终会到达您想要的 URL。因为您要解析 QUERY_STRING,所以我相信您需要使用 RewriteCond。如果您出于 SEO 目的这样做,请不要忘记添加 [R=301]。

http://httpd.apache.org/docs/current/mod/mod_rewrite.html

如果您想尝试另一个方向,那么您需要以下内容。

RewriteRule ^bath-fixture/$ bath-fixture-c-13.html [QSA,L]
RewriteRule ^bath-fixture/([0-9]+) bath-fixture-c-13.html?page=$1 [QSA,L]

如果您能阐明您想要的输入和输出,您将更快地获得正确答案。

【讨论】:

  • 我现在有点困惑,因为添加了您指定的参数后。我回到了开头,现在 URL 不起作用。
  • 也许你的问题有点混乱。目前尚不清楚您是否尝试从mylighting.com/… 的输入变为mylighting.com/bath-fixture/2,反之亦然。上面的规则从复杂的输入到简单的输出。但是,如果您尝试从简单的用户请求到复杂的内部路径,它们是倒退的。
  • 因为它是这样的 URLS 输出:mylighting.com/bath-fixture-c-13.html?id=Qsd443553213Dg 我正在将它们转换为 mylighting.com/bath-fixture。我遇到的问题不是第一个实例,而是这个实例的 url 为:mylighting.com/bath-fixture-c-13.html?page=2&id=!sd556344778545Dg 并且我试图将其转换为 mylighting。 com/bath-fixture/2
  • 所以第一个实例是有效的,因为这两种情况都以 bath-fixture 开头,因此规则匹配,但该规则也始终为 bath-fixture-c-13.html 的内容提供服务。如果这是您的意图,那么您将从 /bath-fixture/ 的输入开始,并希望 /bath-fixure-c-13.html 的输出......在这种情况下,我上面的编辑应该会有所帮助。在您的第一条规则中,您使用 $1 表示第一组 () 没有,所以它是空白的。这是不必要且令人困惑的。在您的第二个示例中,您有一个 $2,规则中只有一组 (),也是空白且不必要的。
  • 真正归结为你是想为丑陋的后端提供漂亮的 URL,还是试图让旧的丑陋的 url 与新的漂亮后端一起工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2012-11-11
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
相关资源
最近更新 更多