htaccess将子目录名重写为查询字符串参数

时间:2011-01-25 23:13:12

标签: .htaccess mod-rewrite rewrite

我对我网站的某个目录有一些特定的需求。我需要改变

/thisDirectory/subDirectory

来表达
/thisDirectory?param=subDirectory

我在成功创建htaccess文件时遇到问题。我尝试了几种不同的东西,但我认为这是最接近的:

RewriteEngine On
RewriteRule ^/directory/(.*)\??(.*)$ /directory/?page=$1&$2

我一直面临着各种各样的500个服务器错误,无限重定向循环等等。任何帮助都将非常感谢,谢谢!

2 个答案:

答案 0 :(得分:3)

我很惊讶这在每个目录的上下文中完全有效,因为您必须从模式中删除每个目录的路径前缀:

  

在.htaccess文件中使用重写引擎时,每个目录前缀(对于特定目录始终相同)会自动删除以进行RewriteRule模式匹配并自动< em>在任何亲戚(不是以斜杠或协议名称开头)之后添加替换遇到规则集的结尾。

如果文档根目录是前导/,规则将如下所示:

RewriteRule ^directory/(.*)\??(.*)$ /directory/?page=$1&$2

但除此之外,RewriteRule只能检查URI路径而不是查询;你需要RewriteCond来做到这一点。所以试试这个:

RewriteRule ^directory/(.+)$ /directory/?page=$1 [QSA]

这里.+而不是.*应避免无限递归,因为.*匹配所有内容,甚至是空字符串(在{{1}之后的空路径段就是这种情况}})。 QSA flag是自动将请求的URI查询附加到新的查询。

答案 1 :(得分:1)

经过多次挫折......我认为这个问题试图重写到同一个“目录”(虽然我认为[L]会照顾它而不是循环...但似乎没有是这样的)。我更改了它重写的目录的名称,它似乎工作...

RewriteBase /my/base/rewrite/
RewriteRule ^directory/(.*)$ newDirectory/?page=$1 [L]