正则表达式的干净URL

时间:2010-08-05 22:52:39

标签: regex lighttpd

干净的网址看起来很简单,但我需要一个特殊的情况。我希望能够包含.html后缀或者根本不包含任何其他扩展名:

someurl = pass
someurl/somepage = pass
someurl.html = pass
someurl/somepage.html = pass

someurl.css = fail
someurl.exe = fail
someurl.anyotherextension = fail
someurl/someother.ext = fail

这可能吗?我是否必须以某种方式排除我不想要的扩展名?

编辑:

到目前为止,答案似乎都没有效果。我自己发现的唯一有用的是:

^/([\w]*(.html)?)$
但它不适用于网址中的斜杠。在字符类括号内添加斜杠会使其失败。

5 个答案:

答案 0 :(得分:0)

试试这个:

(?:^|/)[^./]+(?:\.html)?$

翻译:从最后/开始,如果有一个(或者从字符串的开头,如果没有),则匹配除/.之外的任何内容中的一个或多个,可选择终止.html

答案 1 :(得分:0)

/\.html$|(?:^|.*\/)[^\.]+$/

以“.html”结尾或没有“。”从网址的开头或最后一个/到结尾(你可以有包含“。”的文件夹)

答案 2 :(得分:0)

这个怎么样?

(^[^\.]+?$)|(^.+?\.html$)

匹配不包含任何.的字符串或以.html结尾的字符串。

如果您想在“文件夹”名称中使用点,请使用此选项:

(^.+?/[^\.]+?$)|(^.+?\.html$)

匹配在最后.之后不包含/的字符串或以.html结尾的字符串。

答案 3 :(得分:0)

带有.html扩展名的干净网址的正则表达式选项:

^/([\w\/]*(\.html)?)$

完整的lighttpd.conf行:

url.rewrite = ( "^/([\w\/]*(\.html)?)$" => "index.php?page=$1" )

快速提醒:文件的绝对路径或基本href应该在通过此正则表达式的任何页面中实现。

答案 4 :(得分:0)

使用正则表达式匹配您要阻止的网址,而不是尝试使用正则表达式匹配您想要允许的网址(使用其他答案),使用正则表达式来匹配您要阻止的网址:

\.(?!html$)[^./]*$

此正则表达式匹配URL的扩展名,除非扩展名为.html。没有扩展名或.html扩展名的网址不匹配。您的示例不包含带有查询(?param=value)或fragements(#anchor)的网址,因此正则表达式不会考虑这些内容。我也假设您的正则表达式支持lookahead