Apache2,mod_rewrite - 在下一个条件中使用前一个条件的变量

Apache2, mod_rewrite - use variable from prev condition in next condition

我想检查文件是否存在于子目录中。 我的意思是从“子域”“获取”的子目录。

例如。 url:“test.domain.com/file.txt”文件位置为“/test/file.txt”

我有 wildacrd,但无法对“test”目录进行硬编码。我该怎么做?

我尝试添加 %{DOCUMENT_ROOT}%1/ 但这不起作用。

Options +FollowSymLinks -MultiViews

RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com
RewriteCond %{DOCUMENT_ROOT}%1/ -f [OR]
RewriteCond %{DOCUMENT_ROOT}%1/ -d
RewriteRule ^ /%1%{REQUEST_URI} [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com
RewriteRule ^images/(.*)$ /%1/image.php?test= [L]

使用您展示的示例,请尝试执行以下操作。请确保在测试您的 URL 之前清除您的浏览器缓存。

Options +FollowSymLinks -MultiViews
RewriteEngine ON

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com [NC]
RewriteCond %{DOCUMENT_ROOT}/%1/ -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1/ -d
RewriteRule ^(.*)/?$ %1/ [L]

RewriteCond %{HTTP_HOST} !^www\.  [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com [NC]
RewriteRule ^images/(.*)/?$ %1/image.php?test= [QSA,NC,L]

修复了 OP 的尝试: 你不需要在第二个规则集中使用条件 RewriteCond %{ENV:REDIRECT_STATUS} ^$,即使是第一个规则也可以不需要它,但为了安全起见,您可以拥有它。那么您从 %{DOCUMENT_ROOT} 访问路径的顺序不正确,已在此处更正。