Рейтинг:1

Правило перезаписи htaccess не работает с расширениями файлов

флаг de

У меня есть два домена в одной папке на сервере.

то есть

dl.d123.com @ /var/www/public_html/dl.domain123.com
dl.domain123.com @ /var/www/public_html/dl.domain123.com

У меня есть файл htaccess в /var/www/public_html/domain123.com со следующими строками:

RewriteEngine включен
#Переписать URL-адреса на один домен SSL
RewriteCond %{HTTP_HOST} ^dl\.d123\.com [NC]
RewriteRule ^(.*)$ https://dl.domain123.com/$1 [L,R=301,NC]

Это правило отлично работает с любыми URL-адресами, которые не содержат расширения файла.

dl.d123.com/folder1/folder2 перенаправляет на dl.domain123.com/folder1/folder2

но не работает с любым URL-адресом, содержащим расширение файла

dl.d123.com/folder1/folder2/index.html остается прежним.

Это не просто расширение html. То же самое, например, с файлами png.

Сервер настроен с nginx в качестве прокси. нгинкс: 80/443 -> апач: 8080/8443

РЕДАКТИРОВАТЬ: (Доменное имя и IP-адреса изменены для обеспечения конфиденциальности/безопасности) Конфиги Nginx :80

сервер {
    слушать 123.123.123.123:80;  
    имя_сервера dl.domain123.org www.dl.domain123.org;

    журнал_доступа /usr/local/apache/domlogs/dl.domain123.org.bytes байт;
    журнал доступа /usr/local/apache/domlogs/dl.domain123.org.log полный;
    error_log /usr/local/apache/domlogs/dl.domain123.org.error.log ошибка;

    место расположения / {
        расположение ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt |js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|woff|ttf|svg|eot|sh|webp)$ {
            корень /home/s4h/dl.domain123.org;                    
            истекает макс.;
            try_files $uri $uri/ @backend;
        }
        
        error_page 405 = @backend;
        error_page 500 = @custom;
        add_header X-Cache «УДАЛ из бэкенда»;
        add_header X-XSS-Защита "1; режим = блок" всегда;
        add_header X-Content-Type-Options «нюхать» всегда;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение @backend {
        внутренний;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение @custom {
        внутренний;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    расположение ~ .*\.(php|jsp|cgi|pl|py)?$ {
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение ~ /\.ht {запретить все;}
    местоположение ~ /\.svn/ {запретить все;}
    местоположение ~ /\.git/ {запретить все;}
    местоположение ~ /\.hg/ {запретить все;}
    расположение ~ /\.bzr/ {запретить все;}
    location ~\.(ini|log|conf)$ {запретить все;error_page 403 =404 / ;}

    отключить_символические ссылки, если_не_владелец from=/home/s4h/dl.domain123.org;

    местоположение /.well-known/acme-challenge {
        default_type "текстовый/обычный";
        псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
    }

    местоположение /.well-known/pki-validation {
        default_type "текстовый/обычный";
        псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
    }
}

Конфигурации Nginx: 443

сервер {
    слушать 123.123.123.123:443 ssl ;
    имя_сервера dl.domain123.org www.dl.domain123.org;
    
    журнал_доступа /usr/local/apache/domlogs/dl.domain123.org.bytes байт;
    журнал доступа /usr/local/apache/domlogs/dl.domain123.org.log полный;
    error_log /usr/local/apache/domlogs/dl.domain123.org.error.log ошибка;

    ssl_certificate /etc/pki/tls/certs/dl.domain123.org.bundle;
    ssl_certificate_key /etc/pki/tls/private/dl.domain123.org.key;
    ssl_протоколы TLSv1.2;
    ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA!RC4:EECDH:!RC4:!aNULL :!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
    ssl_prefer_server_ciphers включен;

    ssl_session_cache общий: SSL: 10 м;
    ssl_session_timeout 60 м;

    место расположения / {
        расположение ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt |js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|woff|ttf|svg|eot|sh|webp)$ {
            корень /home/s4h/dl.domain123.org;
            истекает макс.;
            try_files $uri $uri/ @backend;
        }
        
        error_page 405 = @backend;
        error_page 500 = @custom;
        add_header X-Cache «УДАЛ из бэкенда»;
        add_header Strict-Transport-Security "max-age=31536000";
        add_header X-XSS-Защита "1; режим = блок" всегда;
        add_header X-Content-Type-Options «нюхать» всегда;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение @backend {
        внутренний;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение @custom {
        внутренний;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    расположение ~ .*\.(php|jsp|cgi|pl|py)?$ {
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение ~ /\.ht {запретить все;}
    местоположение ~ /\.svn/ {запретить все;}
    местоположение ~ /\.git/ {запретить все;}
    местоположение ~ /\.hg/ {запретить все;}
    расположение ~ /\.bzr/ {запретить все;}
    location ~\.(ini|log|conf)$ {запретить все;error_page 403 =404 / ;}

    отключить_символические ссылки, если_не_владелец from=/home/s4h/dl.domain123.org;

    местоположение /.well-known/acme-challenge {
        default_type "текстовый/обычный";
        псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
    }

    местоположение /.well-known/pki-validation {
        default_type "текстовый/обычный";
        псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
    }
}

dl.d123.com Nginx, только порт 80, SSL не установлен.

сервер {
    слушать 123.123.123.123:80;  
    имя_сервера dl.d123.com www.dl.d123.com;

    access_log /usr/local/apache/domlogs/dl.d123.com.bytes байт;
    журнал доступа /usr/local/apache/domlogs/dl.d123.com.log полный;
    error_log /usr/local/apache/domlogs/dl.d123.com.error.log ошибка;

    место расположения / {
        расположение ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt |js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|woff|ttf|svg|eot|sh|webp)$ {
            корень /home/s4h/dl.domain123.com;                    
            истекает макс.;
            try_files $uri $uri/ @backend;
        }
        
        error_page 405 = @backend;
        error_page 500 = @custom;
        add_header X-Cache «УДАЛ из бэкенда»;
        add_header X-XSS-Защита "1; режим = блок" всегда;
        add_header X-Content-Type-Options «нюхать» всегда;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение @backend {
        внутренний;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение @custom {
        внутренний;
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    расположение ~ .*\.(php|jsp|cgi|pl|py)?$ {
        прокси_пасс http://123.123.123.123:8181;
        включить proxy.inc;
    }

    местоположение ~ /\.ht {запретить все;}
    местоположение ~ /\.svn/ {запретить все;}
    местоположение ~ /\.git/ {запретить все;}
    местоположение ~ /\.hg/ {запретить все;}
    расположение ~ /\.bzr/ {запретить все;}
    location ~\.(ini|log|conf)$ {запретить все;error_page 403 =404 / ;}

    отключить_символические ссылки, если_не_владелец from=/home/s4h/dl.domain123.com;

    местоположение /.well-known/acme-challenge {
        default_type "текстовый/обычный";
        псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
    }

    местоположение /.well-known/pki-validation {
        default_type "текстовый/обычный";
        псевдоним /usr/local/apache/autossl_tmp/.well-known/acme-challenge;
    }
}
флаг us
Пожалуйста, добавьте свою конфигурацию nginx из команды `nginx -T` в вопрос.
iraqiboy90 avatar
флаг de
@TeroKilkanen Только что добавил файлы vhosts nginx
флаг us
Отсутствует блок для dl.d123.com. Пожалуйста, включите его конфигурацию тоже.
iraqiboy90 avatar
флаг de
@TeroKilkanen Еще раз привет, только что добавил
Рейтинг:2
флаг us

Причина в следующем блоке в конфигурации nginx:

расположение ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt |js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|woff|ttf|svg|eot|sh|webp)$ {
    корень /home/s4h/dl.domain123.org;
    истекает макс.;
    try_files $uri $uri/ @backend;
}

Это говорит nginx обслуживать файлы напрямую с указанными расширениями. Обратите внимание, в списке есть .html и .png расширения.

Вы должны сделать перенаправление внутри nginx:

сервер {
    слушать 123.123.123.123:80;  
    имя_сервера dl.d123.com www.dl.d123.com;

    access_log /usr/local/apache/domlogs/dl.d123.com.bytes байт;
    журнал доступа /usr/local/apache/domlogs/dl.d123.com.log полный;
    error_log /usr/local/apache/domlogs/dl.d123.com.error.log ошибка;

    место расположения / {
        вернуть 301 https://www.dl.domain123.org$request_uri;
    }
}
iraqiboy90 avatar
флаг de
Останавливает ли это способность nginx обслуживать кешированный контент? или файл конфигурации nginx vhost conf для dl.domain123.com вступит во владение и вместо этого будет обслуживать кеш? Другая проблема заключается в том, что файлы vhost перезаписываются панелью хостинга, поэтому могу ли я ввести это правило в отдельный файл, чтобы оно не было перезаписано? будет ли это работать, или у nginx будет два файла vhost, которые будут конфликтовать друг с другом?
флаг us
Все URL-адреса для этого виртуального хоста будут перенаправлены 301 на `www.dl.domain123.org`, и конфигурация этого виртуального хоста будет применяться к запросам для этого виртуального хоста. Следовательно, это не влияет на показ изображений `www.dl.domain123.org`. Вам нужно спросить у хостинг-провайдера, как это организовать. Панели хостинга заставляют свои системы работать нестандартно, и мы не можем знать, как они работают.
iraqiboy90 avatar
флаг de
Спасибо за помощь. Я посмотрю, как я могу применить эту конфигурацию без перезаписи ее панелью на более позднем этапе.
iraqiboy90 avatar
флаг de
Я нашел способ применить это. В панели хостинга есть возможность изменить настройки веб-сервера для выбранных доменов. У меня есть один пользователь с 15 доменами, все переписывающими на domain123.org.Таким образом, вместо того, чтобы все домены, включая домены других пользователей, имели одинаковую конфигурацию «nginx -> apache» с одним и тем же шаблоном vhost, я просто переключил эти 15 доменов на «только nginx» (у которого есть собственный каталог шаблонов vhost) и мог применить настраиваемый шаблон vhost, который применяет строку «return 301» ко всем из них и сохраняет домен server_name с переменными %domain%. Мне больше не нужно правило htaccess

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.