Apache Mod Rewrite 直接分发内容

Apache Mod Rewrite 直接分发内容

我想知道是否可以发送带有页面内容的 200 状态而不经过 30x 状态?

示例或重写条件:

RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteCond %{REQUEST_URI} !errors\/noua\.htm
RewriteRule (.*) /errors/noua.htm

在这种情况下,我想直接显示 noua.htm 并显示 200 状态(而不执行 301 重定向到 noua.htm)

谢谢

答案1

你几乎已经拥有它了

https://httpd.apache.org/docs/2.4/rewrite/flags.html

您缺少 P 标志

RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteCond %{REQUEST_URI} !errors\/noua\.htm
RewriteRule (.*) /errors/noua.htm [P]

答案2

谢谢,它起作用了!

我添加了更多信息,因为它是 https,所以重写规则由于 SSL 代理被禁用而返回 500 错误

我必须添加SSLProxyEngine On虚拟主机才能让这个答案在 https 中完全发挥作用

我还注意到它必须放在所需的虚拟主机中,如果它添加到全局配置中,则这些参数将不会共享:

例子:

这有效

<VirtualHost *:443>
ServerName example.domaine.com
DocumentRoot /var/www/example/
SSLProxyEngine On
RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteCond %{REQUEST_URI} !errors\/noua\.htm
RewriteRule (.*) /errors/noua.htm [P]
...
</VirtualHost>

<VirtualHost *:443>
SSLEngine on
...
</VirtualHost>

这不起作用

<VirtualHost *:443>
ServerName example.domaine.com
DocumentRoot /var/www/example/
RewriteCond %{HTTP_USER_AGENT} ^-?$
RewriteCond %{REQUEST_URI} !errors\/noua\.htm
RewriteRule (.*) /errors/noua.htm [P]
...
</VirtualHost>

<VirtualHost *:443>
SSLEngine on
SSLProxyEngine On
...
</VirtualHost>

相关内容