最后一个斜线后,假设像http://domain.com/aaaa/bbb/ccc/ddd获取最后一个元素与的.htaccess
我想使用.htaccess文件,以获得最后一个元素,在这种情况下DDD的字符串。
我使用:
重写规则/ $ PT = $ 1 [L]
但它只能以斜杠作品(*)?
最后一个斜线后,假设像http://domain.com/aaaa/bbb/ccc/ddd获取最后一个元素与的.htaccess
我想使用.htaccess文件,以获得最后一个元素,在这种情况下DDD的字符串。
我使用:
重写规则/ $ PT = $ 1 [L]
但它只能以斜杠作品(*)?
那是因为你的正则表达式包括尾随斜线。
尝试:
RewriteRule ([^/]+)/?$ ?pt=$1 [L]
斜线后的问号表示 “零或一”。如果您不想要这种行为,请相应地更改正则表达式。
编辑:
因为改写指令会改写完成后(至少在每个目录范围内)进行重新运行,重要的是要确保规则不会重新运行在你已经达到所需的重写之后。有多种方式来实现这一目标,但一个是:
RewriteCond %{QUERY_STRING} !pt
RewriteRule ([^/]+)/?$ ?pt=$1 [L]
的RewriteCond
的一点是要防止RewriteRule
被应用的时候已经有一个查询字符串,在它pt
的地方,这将是一个线索,重写已经发生。更复杂的规则可能需要更多或不同的RewriteCond
指令。
它的工作原理:
RewriteEngine On
RewriteRule ^([A-Za-z0-9]+)$ /index.php?content=$1 [L]
它将改变以下网址:
http://example.com/anypage
到
http://example.com/index.php?content=anypage
但它会压倒一切,而忽略参数。因此最好给 添加一个额外的限制。
谢谢您的回答,但问号阿帕奇返回500错误。 – edelgado 2011-03-22 16:36:10
@edelgado我怀疑问号是那里的问题。不过,我可能会错误地记住mod_rewrite的正则表达式语法。你的网站的apache错误日志的错误信息是什么? – Andrew 2011-03-22 16:40:31
消息是 [Tue Mar 22 16:43:09 2011] [error] [client 213.141.22.130]由于可能的配置错误,请求超过了10个内部重定向的限制。如果需要,使用'LimitInternalRecursion'来增加限制。使用'LogLevel debug'来获得回溯。 – edelgado 2011-03-22 16:44:01