Regex .htaccess |用页面重写

Regex .htaccess |用页面重写,regex,.htaccess,url,rewrite,Regex,.htaccess,Url,Rewrite,因此,我正在调整我正在处理的站点上的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 现在不幸的是,在该页面上还有其他几个项目要查看,我在使

因此,我正在调整我正在处理的站点上的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时,它都会将我带到类别的第一页,而不是第二页。

您似乎误解了重写规则的格式。第一个是偶然工作的

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。因为要解析查询字符串,我认为需要使用RewriteCond。如果你这样做是为了搜索引擎优化的目的,不要忘记添加[R=301]

如果你想走另一个方向,那么你需要以下几点

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/bath-fixture/2作为输出。根据您下面的评论和上面的陈述,您希望使用mylighting.com/bath-fixture/2作为输入,并在不重定向的情况下提供mylighting.com/bath-fixture-c-13.html?id=的内容。我现在有点困惑,因为在添加参数后,您是如何指定的。我回到开头,现在URL不起作用。也许你的问题有点让人困惑。不清楚您是否正试图从的输入转到,或者反之亦然。上面的规则从复杂的输入到简单的输出都朝这个方向发展。然而,如果您试图从简单的用户请求转到复杂的内部路径,它们是反向的。因为URL输出如下:mylighting.com/bath-fixture-c-13.html?id=qsd44353213dg,我正在将它们转换为mylighting.com/bath-fixture。我遇到的问题不是第一个实例,而是这个实例的url是:mylighting.com/bath-fixture-c-13.html?page=2&id=!sd556344778545Dg,我正在尝试将其转换为mylighting.com/bath-fixture/2So第一个实例正在运行,因为这两种情况都是从bath-fixture开始的,因此规则匹配,但该规则也始终服务于bath-fixture-c-13.html的内容。如果这是您的意图,那么您将从/bath fixture/的输入开始,并希望得到/bath-fixture-c-13.html的输出。。。在这种情况下,我上面的编辑应该会有所帮助。在您的第一条规则中,您使用$1,它引用了没有的第一组(),因此它是空的。这是不必要的,也是令人困惑的。在您的第二个示例中,您有一个$2,规则中只有一组(),也是空白且不必要的。实际上,您是在尝试为丑陋的后端提供漂亮的URL,还是在尝试让旧的丑陋URL与新的漂亮后端一起工作。