带有点和请求root的Apache RewriteRule正则表达式

时间:2017-07-17 18:32:05

标签: apache .htaccess mod-rewrite

DocumentRoot指向仅包含带有RewriteRule指令的.htaccess的文件夹。

Apache正则表达式中的点字符匹配任何单个字符。

规则RewriteRule a..b - [G]按预期工作:

GET /ab HTTP/1.1
GET /axb HTTP/1.1
GET /axxxb HTTP/1.1
GET /zaxx HTTP/1.1
404 Not Found - OK

GET /axxb HTTP/1.1
GET /zaxxbz HTTP/1.1
410 Gone - OK

规则RewriteRule .. - [G]在所有情况下都按预期工作,除非在请求" /":

GET /x HTTP/1.1
404 Not Found - OK

GET /xx HTTP/1.1
GET /xxx HTTP/1.1
GET /xxxx HTTP/1.1
410 Gone - OK

GET / HTTP/1.1
410 Gone - WRONG!

为什么在请求" /"时,仅包含点的正则表达式无法按预期工作在Apache 2.4?

1 个答案:

答案 0 :(得分:0)

这条规则:

RewriteRule .. - [G]

410返回/,因为在DirectoryIndex模块之前运行的mod_rewrite指令在index.htmlindex.*前面附加/ 1}}。

这使得..匹配index.html的2个字符,然后获得410 Gone

如果您通过将此行放在.htaccess的顶部来禁用此指令,那么410的{​​{1}}将会消失:

/