一个奇怪的请求,但我真的需要答案。你们能帮我使用重写规则从 Lighttpd.conf 中的 URL 中删除尾部斜杠吗?
例如:
**A** www.example.com/page/
**B** www.example.com/page
我想让 url A 被强制纳入 url B 的语义。
非常感谢。
答案1
你想做什么听起来错误的。Web 服务器不处理浏览器看到的请求 URL。这是应用程序问题。您的 Web 应用程序需要以 的形式呈现 URL,www.example.com/page
而不是www.example.com/page/
现在的形式。
如果您不想更改应用程序但仍希望获得这种期望的行为,您可能需要考虑在 lighty 前面使用过滤代理,然后过滤所有返回的链接。
答案2
不是重点,但你可能想要相反的效果...
无论如何,就 lighttpd 代码而言,将会像这样:
url.redirect = ( "/page/" => "/page" )
url.rewrite-once = ( "/page" => "/page/" )
但是,由于“/page”找不到文件并尝试目录“/page/”(并且重写似乎没有采取任何措施来隐藏这一点),这确实产生了重定向循环。
那么你真正的问题就是:是否可以告诉 lighttpd 不要在目录上重定向?不幸的是,我没有找到办法……但我没有深入搜索,事实上我确实更喜欢带有尾部斜杠的 URL(也是视觉上的)……
答案3
假设你想让请求/foo/bar
服务于/foo/bar/index.html
,并/foo/bar/
重定向到/foo/bar
。那么你可以说:
url.redirect = ("^/foo/bar/$" => "/foo/bar")
url.rewrite-once = ("^/foo/bar$" => "/foo/bar/index.html")
直接重写到索引文件而不是重写到/foo/bar/
,并使用锚定重定向正则表达式$
,避免重写后触发重定向规则。