2014-03-03 27 views
0

重写因此,我正在调整我正在处理的网站上的网址,并且在网址中传递了一些变量时遇到了一些问题。.htaccess |用页面

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

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

现在不幸的页面上还有其他几个项目来查看和我有一些麻烦的页面变量。我认为我的代码是正确的,但是每次我尝试去正确的页面时,它似乎都不起作用。

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时,都会将我带到类别的第一页,而不是第二页。

+0

什么是您想要在浏览器中看到的URL以及您想要在内部重写的内容? – anubhava

+0

我想在浏览器中看到mylighting.com/bath-fixture/2作为输出。 –

+0

根据您的意见以及上述陈述,您希望使用mylighting.com/bath-fixture/2作为输入,并具有mylighting.com/bath-fixture-c-13.html?id=服务的内容,没有重定向。 – AaronM

回答

0

看来你错误地理解了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] 

如果你能澄清你想要的输入和输出,你将得到更快的正确答案。

+0

我现在有点困惑,因为添加了你指定的参数之后。我回到了开头,现在URL不起作用。 –

+0

也许你的问题有点混乱。目前还不清楚您是否尝试从http://mylighting.com/bath-fixture-c-13.html?page=2&id=u0hnumfus6gjhjc45av36663m3输入http://mylighting.com/bath-fixture/2或相反亦然。上面的规则是从复杂输入到简单输出的这个方向。但是,如果您试图从简单的用户请求到复杂的内部路径,它们会倒退。 – AaronM

+0

因为它是这样的URLS输出:mylighting.com/bath-fixture-c-13.html?id=Qsd443553213Dg,我将它们转换为mylighting.com/bath-fixture。我遇到的问题不是与第一个实例,但与此实例的网址是:mylighting.com/bath-fixture-c-13.html?page=2&id=!sd556344778545Dg和Im试图将其转换为mylighting。 com/bath-fixture/2 –