Apache Mod Rewrite:处理两个Get变量

Apache Mod Rewrite:处理两个Get变量,apache,mod-rewrite,Apache,Mod Rewrite,如何编辑此url重写以包含附加到url的进一步get变量?我尝试了一些尝试,但我总是得到一个500内部服务器错误 我添加了一些评论,以显示我正在努力实现的目标 # /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\ /vi

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

我添加了一些评论,以显示我正在努力实现的目标

# /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]

感谢大家的帮助

URI查询参数的问题是它们可能以任何顺序出现。有了两个参数,就有了两种排列(A在B之前,B在A之前)。但是,要提取的参数越多,就有越多的排列()

这意味着您应该将参数按正确的顺序排列,以便一次可以对它们执行以下操作:

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]
第一个条件检查请求行,如规则中所示。第二个条件选择页面参数并将其放在查询字符串的开头。第三个条件与user参数相同,因此顺序始终为:first user,second page。然后我们使用第四个条件一次获取两个参数值,以便在
重写规则
替换中使用它们。查询的其余部分将附加到替换URI(请参见
%3
)中,但如果需要,可以将其关闭


如您所见,要提取的参数越多,它就越复杂。使用比PHP等mod_rewrite更强大的语言更容易做到这一点。

@Gumbo-上面没有错误,但是当我编辑htaccess文件以包含另一个get变量时,我得到一个错误(500内部服务器错误)-我希望了解如何正确编辑上述内容,以包括两个GET变量,并按照我的评论中的那样重写URL,
/h5k66/1
。第一段是用户GET变量,第二段是页面GET变量。@Abs:那么您如何尝试包含另一个GET参数?我有一些猜测,我刚才尝试的最后一个是:
^([^&]*&)*user=([^&]+)&?*$([^&]*&)*page=([^&]+)&?*$
-这只是前一个GET变量“user”的副本。这不起作用。@Abs:现在怎么办:它只是不起作用,或者它导致了一个内部错误?通过上述操作,我得到了一个500个内部服务器错误。如果我把它拿走,那就好了。我的语法对两个get变量正确吗?你是对的,这将变得复杂。我已经开始使用codeigniter重新编写我的项目,我认为我可以利用路由。