如何解决Apache2,mod_rewrite - 在下一个条件中使用上一个条件中的变量
我想检查文件是否存在于子目录中。 我的意思是从“子域”“获取”的子目录。
例如。 url: "test.domain.com/file.txt" 文件位置是 "/test/file.txt"
我有wildacrd,但无法对“test”目录进行硬编码。我该怎么做?
我尝试添加 %{DOCUMENT_ROOT}%1/$1
但这不起作用。
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com
RewriteCond %{DOCUMENT_ROOT}%1/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}%1/$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=$1 [L]
解决方法
使用您显示的示例,请尝试以下操作。在测试您的网址之前,请务必清除浏览器缓存。
Options +FollowSymLinks -MultiViews
RewriteEngine ON
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com [NC]
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%1/$1 -d
RewriteRule ^(.*)/?$ %1/$1 [L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain.com [NC]
RewriteRule ^images/(.*)/?$ %1/image.php?test=$1 [QSA,NC,L]
OP 尝试中的修复:您不需要在第二个规则集中使用条件 RewriteCond %{ENV:REDIRECT_STATUS} ^$
,即使第一个可能不需要它,但为了更安全的一面可以拥有。那么您从 %{DOCUMENT_ROOT} 访问路径的顺序不正确,此处已更正。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。