简单的问题真的。
内部redirect后,原来的“上下文”消失了。 我想知道是否有一个variables或标志,让我检查原来的请求,而不是重写的请求。 伪代码:
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .+ public/$0.html [L] RewriteCond %{WHAT_USER_TYPED} ^public/(.+)\.html RewriteRule .+ - [R=404,L]
在这个例子中,当我键入mywebsite.com/slug
,请求被重写为path public/slug.html
。 现在,发生内部redirect,我的path可能匹配第二个条件public/(.+)\.html
,并返回一个404.这不是我想要的。 所以,我想知道是否有这样的解决scheme。
还有一个原因,你应该避免在.htaccess文件中添加重写。 如果你想在主服务器环境中这样做,你不会有这个问题。 在目录上下文或.htaccess文件中,每个重写都会导致一个内部子请求。
有一个参数包含原始请求,它是“%{THE_REQUEST}
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) public/$0.html?redir [L] RewriteCond %{THE_REQUEST} GET\ /public RewriteRule .* - [R=404,L]
这应该做到这一点。