2010-05-17 14 views
0

如何编辑此url重写以包含进一步的get变量被附加到URL?我尝试了一些尝试,但我总是得到500内部服务器错误!Mod重写:处理两个获取变量

我已添加评论以显示我正在努力实现的目标。

# /view.php?user=h5k6&page=1 externally to /h5k6/1 
# Some times the page get variable will not exist so it should just show /h5k6 
RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^([^&]*&)*user=([^&]+)&?.*$ 
RewriteRule ^view\.php$ /%2? [L,R=301] 

# /h5k6/1 internally to /view.php?t=h5k6&page=1 
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L] 

感谢所有帮助

+0

错误日志说什么? – Gumbo 2010-05-17 22:37:05

+0

@Gumbo - 上面没有错误,但是当我编辑htaccess文件以包含另一个获取变量时,出现错误(500内部服务器错误) - 我希望找出如何编辑上述* *正确地**包含两个GET变量,并在我的注释中重写URL,'/ h5k66/1'。第一部分是用户GET变量,第二部分是页面GET变量。 – Abs 2010-05-17 22:42:01

+0

@Abs:那么你如何尝试包含另一个GET参数? – Gumbo 2010-05-17 22:49:38

回答

1

与URI查询参数的问题都在于,它们可能出现在任何顺序。有两个参数,你只有两个排列组合(A之前BB之前A)。但是你想要提取更多的参数(n!)。

这意味着你应该把论点正确的顺序,以便您可以将它们在同一时间:

RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)(page=[^&]+)&?([^&].*)?$ 
RewriteCond %3&%1%4 ^(([^&]*&)*)(user=[^&]+)&?([^&].*)?$ 
RewriteCond %3&%1%4 ^user=([^&]+)&page=([^&]+)&?([^&].*)?$ 
RewriteRule ^view\.php$ /%1/%2?%3 [L,R=301] 

第一个条件检查请求行就像在你的规则。第二个条件选取参数并将其放在查询字符串的开头。第三个条件与用户参数相同,因此该订单始终为:第一个用户,第二个。然后我们使用第四个条件一次取两个参数值,以便在RewriteRule替换中使用它们。查询的其余部分附加到替换URI(请参阅%3),但如果需要,可以将其关闭。

正如你所看到的,你想要提取的参数越多,它就越复杂。用比PHP这样的mod_rewrite更强大的语言来做到这一点更容易。

+0

你说得对,这会变得复杂。我已经开始使用codeigniter重写我的项目,我想我可以利用路由。 – Abs 2010-05-27 11:06:03