![让 apache 发送标头 401,除非存在参数](https://linux22.com/image/675862/%E8%AE%A9%20apache%20%E5%8F%91%E9%80%81%E6%A0%87%E5%A4%B4%20401%EF%BC%8C%E9%99%A4%E9%9D%9E%E5%AD%98%E5%9C%A8%E5%8F%82%E6%95%B0.png)
我有一个 rest api,仅当请求中存在参数“manual”时才需要执行。
我尝试在虚拟主机声明中使用 RedirectMatch 指令
RedirectMatch 401 "^\/api\/file\.php\?.*(?!manual).*$
但它不起作用。实际上,正则表达式的最后部分似乎都不起作用。
编辑:嗯,我刚刚发现 RedirectMatch 指令与 get 请求的查询部分不匹配......
答案1
好的。我可以用 mod_rewrite 来实现:
RewriteCond %{REQUEST_URI} ^/api/file\.php$ [NC]
RewriteCond %{QUERY_STRING} !^.*\&manual=.*$ [NC]
RewriteRule ^/api/file\.php - [R=401]
到目前为止一切似乎运行良好 ;)