这确实是一个简单的问题。
内部重定向后,原始“上下文”就消失了。我想知道是否有一个变量或标志允许我检查原始请求而不是重写的请求。伪代码:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .+ public/$0.html [L]
RewriteCond %{WHAT_USER_TYPED} ^public/(.+)\.html
RewriteRule .+ - [R=404,L]
在此示例中,当我键入时,mywebsite.com/slug
请求会被重写为路径public/slug.html
。现在,发生内部重定向,我的路径可能符合第二个条件public/(.+)\.html
,并返回 404。这不是我想要的。所以,我想知道是否有某种解决方案。
答案1
还有另一个原因,您应该避免在 .htaccess 文件中添加重写规则。如果您在主服务器上下文中执行此操作,则不会遇到此问题。在目录上下文或 .htaccess 文件中,每次重写都会导致内部子请求。
有一个包含原始请求的参数,它是“%{THE_REQUEST}
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) public/$0.html?redir [L]
RewriteCond %{THE_REQUEST} GET\ /public
RewriteRule .* - [R=404,L]
这应该可以。