干净的网址看起来很简单,但我需要一个特殊的情况。我希望能够包含.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)?)$但它不适用于网址中的斜杠。在字符类括号内添加斜杠会使其失败。
答案 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。