我对我网站的某个目录有一些特定的需求。我需要改变
/thisDirectory/subDirectory
以
来表达/thisDirectory?param=subDirectory
我在成功创建htaccess文件时遇到问题。我尝试了几种不同的东西,但我认为这是最接近的:
RewriteEngine On
RewriteRule ^/directory/(.*)\??(.*)$ /directory/?page=$1&$2
我一直面临着各种各样的500个服务器错误,无限重定向循环等等。任何帮助都将非常感谢,谢谢!
答案 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]