mod_rewrite可以区分“用户”请求和内部redirect吗?

简单的问题真的。

内部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] 

这应该做到这一点。