微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。