2011-01-25 154 views
4

我对我的网站的某个目录有一些特定的需求。我需要改变htaccess将子目录名重写为查询字符串参数

/thisDirectory/subDirectory 

/thisDirectory?param=subDirectory 

我在成功创建一个htaccess文件,将做到这一点的问题才能通过。我已经尝试了几种不同的东西,但我认为这是最接近:

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

我一直面临着各种500服务器错误,无限循环重定向,等等等等,任何帮助将不胜感激,谢谢!

回答

3

我很惊讶,这确实在所有的工作在每个目录范围内,你将不得不剥离每从图案-directory路径前缀:

当使用在.htaccess重写引擎文件的每目录前缀(其总是为特定的目录相同的)自动除去是用于RewriteRule模式匹配和自动添加后任何亲属(不是开始机智h斜线或协议名称)替换会遇到规则集的结尾。

在文档根目录,这将是的情况下,领先/和规则是这样的:

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

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

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

这里.+代替.*应避免无限递归作为.*匹配的一切,甚至是空字符串(/directory/后,这将是空的路径段的情况下)。而QSA flag将自动将请求的URI查询附加到新的URI。

1

经过很多挫折...我认为这个问题是试图做一个相同的“目录”重写(虽然我认为[L]会照顾它不循环...但这似乎并不情况就是如此)。我改变了它被改写到目录的名称,似乎工作...

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