2011-03-22 78 views

回答

2

那是因为你的正则表达式包括尾随斜线。

尝试:

RewriteRule ([^/]+)/?$ ?pt=$1 [L] 

斜线后的问号表示 “零或一”。如果您不想要这种行为,请相应地更改正则表达式。

编辑:

因为改写指令会改写完成后(至少在每个目录范围内)进行重新运行,重要的是要确保规则不会重新运行在你已经达到所需的重写之后。有多种方式来实现这一目标,但一个是:

RewriteCond %{QUERY_STRING} !pt 
RewriteRule ([^/]+)/?$ ?pt=$1 [L] 

RewriteCond的一点是要防止RewriteRule被应用的时候已经有一个查询字符串,在它pt的地方,这将是一个线索,重写已经发生。更复杂的规则可能需要更多或不同的RewriteCond指令。

+0

谢谢您的回答,但问号阿帕奇返回500错误。 – edelgado 2011-03-22 16:36:10

+0

@edelgado我怀疑问号是那里的问题。不过,我可能会错误地记住mod_rewrite的正则表达式语法。你的网站的apache错误日志的错误信息是什么? – Andrew 2011-03-22 16:40:31

+0

消息是 [Tue Mar 22 16:43:09 2011] [error] [client 213.141.22.130]由于可能的配置错误,请求超过了10个内部重定向的限制。如果需要,使用'LimitInternalRecursion'来增加限制。使用'LogLevel debug'来获得回溯。 – edelgado 2011-03-22 16:44:01

0

它的工作原理:

RewriteEngine On 
RewriteRule ^([A-Za-z0-9]+)$ /index.php?content=$1 [L] 

它将改变以下网址:

http://example.com/anypage 

http://example.com/index.php?content=anypage 

但它会压倒一切,而忽略参数。因此最好给 添加一个额外的限制。

相关问题