Проблема:
Мы находимся в процессе замены старого веб-сайта на основе PHP (на основе Statamic v1) на HTML-версию SSG, созданную с помощью Gatsby.
Проблема в том, что должна быть заменена только часть существующих страниц, в то время как пространство элементов и страницы /login
и /contact
должны быть сохранены.
Так что мне интересно, как мне адаптировать текущую конфигурацию .htaccess
к новой версии , которая сначала смотрит , для нового статического содержимого, найденного в определенном каталоге (public/
), или, если нет, отступить к старый index.php?path=
метод.
Примечание:
С nginx
это будет сделано с помощью директивы try_files
Итак, этот вопрос как-то связан с:
https://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files
но я абсолютно не понимаю вещи balancer://app_cluster
..
Контекст:
Вот упрощенное представление каталогов, поскольку они должны обслуживаться Apache:
www/
├── index.php
├── (... more CMS files)
└── public
├── index.html
├── main.js
├── robots.txt
├── img
│ ├── intro.jpg
│ ├── logo.svg
│ └── table.png
├── about
│ └── index.html
└── staff
└── index.html
Все в public/
должно быть подано сначала
без указания /public
в конечном URL:
URL : /img/intro.jpg => /public/img/intro.jpg (rewritten as /img/intro.jpg)
И каждый URL, соответствующий странице /index.html
, должен быть переписан без него:
URL : '' or '/' => /public/index.html (rewritten as '')
URL : /staff or /staff/ => /public/staff/index.html (rewritten as /staff)
Каждый не найденный файл перенаправляется на /index.php?path=...
, как уже было сделано.
Вопрос
Возможно ли только с Apache без пересортировки в два отдельных субдомена и virtual_hosts .. разделить 2 источника?
Я думаю, что да, учитывая невероятные способности Apache,
но так как я более привык к способам работы с nginx, мне действительно нужна ваша помощь здесь !! :)
Текущая конфигурация
(не спрашивайте меня почему)
# Turn on the Rewrite Engine
RewriteEngine On
# PERMANENT HTTPS REDIRECTION
RewriteCond %{REQUEST_SCHEME} =http
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# If you're running in a subfolder (like http://example.com/statamic),
# add that here. E.g. /statamic/
RewriteBase /
# Protect your system files from prying eyes
RewriteRule ^(_app) - [F,L]
RewriteRule ^(_config) - [F,L]
RewriteRule ^(_content) - [F,L]
RewriteRule ^(_logs) - [F,L]
RewriteRule ^(.*)?\.yml$ - [F,L]
RewriteRule ^(.*)?\.yaml$ - [F,L]
RewriteRule ^(.*/)?\.git+ - [F,L]
# This will prevent all .html files from being accessed.
# You may want to remove this line if you want to serve
# static files outside of Statamic
# RewriteRule ^(.*)?\.html$ - [F,L]
# Remove trailing slashes from your URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]
# Remove the index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
# No Cache.. because of user's logged/not logged output differences
# Header set Cache-Control "no-cache"
# Enable expirations
ExpiresActive On
# Default directive
ExpiresDefault "modification"
ExpiresByType text/html "modification"
# # My favicon
ExpiresByType image/x-icon "access plus 1 year"
# # Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 month"
# Javascript
ExpiresByType application/javascript "access plus 1 month"
# COMPRESS JSON
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/json