我想知道是否可以发送带有页面内容的 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>