AliasMatch 将捕获 Apache 重写 URL

AliasMatch 将捕获 Apache 重写 URL

我需要 mod_rewrite 来重新映射传入的 URL,以便它被捕获AliasMatch

RewriteCond %{REQUEST_URI} ^/app/(.*)$
RewriteRule ^/app/(.*)  ^/dev-dave/app/$1

RewriteCond %{REQUEST_URI} ^/static/(.*)$
RewriteRule ^/static/(.*) ^/dev-dave/static/$1



AliasMatch ^/(.*)/static/(.*)$ /var/www/html/cosmos/$1/dist/static/$2
AliasMatch ^/(.*)/app/(.*)$ /var/www/html/cosmos/$1/dist/index.html
<Directory /var/www/html/cosmos>
            AllowOverride None
            Require all granted

    <IfModule mod_rewrite.c>
                RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d

    </IfModule>
</Directory>

这可能吗?我无法让它工作。

答案1

总的来说服务器配置您应该在想要被 捕获的指令上使用PT( passthrough) 标志。(该标志隐含在RewriteRuleAliasMatchPT目录上下文,因此它不需要在文件后面、容器中出现的指令上执行<Directory>。)

来自Apache 文档中的PT标志

默认情况下,RewriteRule 中的目标(或替换字符串)被假定为文件路径。使用 [PT] 标志会导致它被视为 URI。也就是说,使用 [PT] 标志会导致 RewriteRule 的结果通过 URL 映射传回,这样基于位置的映射(例如 Alias、Redirect 或 ScriptAlias)就有机会生效

例如,如果你有一个 /icons 的别名,并且有一个指向那里的 RewriteRule,那么你应该使用 [PT] 标志确保别名被评估


            RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d

在旁边:你的前端控制器,稍后定义,缺少RewriteRule指令?!所以这在当前状态下不会做任何事情。但是,它也容易出错……如果你稍后RewriteRule<Directory>容器中添加了指令,那么前面的状况将会(意外地)被应用。

相关内容