如果设置了 cookie 并且仅适用于子目录,则使用代理或重定向到文件

如果设置了 cookie 并且仅适用于子目录,则使用代理或重定向到文件

我目前正在尝试通过代理或基于 cookie 向 PHP 文件发送请求。该规则仅适用于/api

这是我目前所拥有的。它是我的 VirtualHost 配置的一部分:

RewriteEngine on
# Cookie is not set. Send all request from /api/$ to local-file.php
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} !\bexample_cookie=true\b
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /local-php.php [L]

# Cookie is set. Send all request to the proxy.
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b
RewriteRule ^/(.*)$ http://proxy-domain.local/$1 [P,L]
ProxyPassReverse /api http://proxy-domain.local

现在,我的请求可以根据 cookie 正确路由。但不幸的是,这是全局的,并且不仅限于以 开头的路径/api。我错过了什么?

答案1

# Cookie is set. Send all request to the proxy.
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b
RewriteRule ^/(.*)$ http://proxy-domain.local/$1 [P,L]

第一个条件只有REQUEST_URI不是以 开头/api。但是,这个条件似乎是多余的,因为您可以在RewriteRule指令本身中执行相同的检查,该指令目前匹配一切

例如:

# Cookie is set. Send all request to the proxy.
RewriteCond %{HTTP_COOKIE} \bexample_cookie=true\b
RewriteRule ^/api/(.*)$ http://proxy-domain.local/$1 [P,L]

请注意,这要求请求至少以 开头/api/,而不是/api- 这样可以吗?

然而,我也会质疑第一个规则块的逻辑:

# Cookie is not set. Send all request from /api/$ to local-file.php
RewriteCond %{REQUEST_URI} !^/api(/.*|)$ [NC]
RewriteCond %{HTTP_COOKIE} !\bexample_cookie=true\b
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /local-php.php [L]

除了不做评论声明,当请求发生以下情况时,它将重写 URL:不是启动/api并且未设置 cookie。如果设置了 cookie 会怎么样?这也不会重写对根目录本身的请求 - 如果 DirectoryIndex 已正确设置,这可能是故意的?

相关内容