Мне нужен 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>
Возможно ли это? Я не могу заставить это работать.
В основной конфигурации сервера вы должны использовать флаг PT
( passthrough
) в RewriteRule
] директивы, которые вы хотите перехватить AliasMatch
. (Флаг PT
подразумевается в контексте каталога , поэтому он не требуется для директив, которые появляются позже в вашем файле, в контейнере
.)
Из документации 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
позже в контейнер
, тогда предыдущие условия будут (неожиданно) применены.