【问题标题】:Apache2, mod_rewrite - use variable from prev condition in next conditionApache2,mod_rewrite - 在下一个条件中使用上一个条件中的变量
【发布时间】:2021-08-15 14:09:06
【问题描述】:

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

例如。 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]

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting apache2


    【解决方案1】:

    使用您展示的示例,请尝试以下操作。请确保在测试您的 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/$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} 访问路径的顺序不正确,此处已更正。

    【讨论】:

    • @iknownothing,抱歉,您需要提供更多关于哪个示例 url 不起作用的信息?你遇到了什么错误?
    • 我的错误是我没有更改行“RewriteRule ^(.*)/?$ %1/$1 [L]” 不起作用。你能解释一下我的规则有什么问题吗?非常感谢
    • @iknownthing,哦,好的,感谢您的告知。干杯,快乐学习。
    猜你喜欢
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多