URL-адрес перезаписи Apache, который будет перехвачен AliasMatch

Мне нужен 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
задан 14 July 2017 в 04:17
1 ответ

В основной конфигурации сервера вы должны использовать флаг 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 позже в контейнер , тогда предыдущие условия будут (неожиданно) применены.

2
ответ дан 3 December 2019 в 20:20

Теги

Похожие вопросы