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} 访问路径的顺序不正确,已在此处更正。
我想检查文件是否存在于子目录中。 我的意思是从“子域”“获取”的子目录。
例如。 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} 访问路径的顺序不正确,已在此处更正。