Назад | Перейти на главную страницу

Как я могу использовать преобразованный файл .htaccess в конфигурации Nginx?

Примерно 5 дней я безуспешно пытаюсь запустить свой сайт. Проблема в том, что я использую apache на локальном компьютере, и мой веб-сайт хорошо работает на локальном уровне, а мой сервер использует nginx, и я не могу использовать преобразование .htaccess внутри конфигурации nginx.

Вот упрощенная структура моего сайта:

/mywebsite
    /application
    /files
        file1.php
        .htaccess
    /public
        /css
        /js
.htaccess

Видеть? у меня есть два .htaccess файлы. Один расположен в корне, а другой внутри files каталог. На локальном хосте все работает, так как я использую Apache на localhost. Теперь мне нужно заставить его работать на сервере, который использует nginx.

я использую этот сайт для преобразования содержимого файлов htaccess в конфигурацию nginx.

Прежде всего, в какой файл вставить результат конвертации? (где находится файл конфигурации nginx? /etc/nginx/nginx.conf ?)

И как я могу справиться с этими двумя .htaccess файлы? Должен ли я сделать еще два файла nginx?


.htaccess файл в корне:

RewriteEngine on
Options -Indexes

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([\s\S]*)$ index.php?rt=$1 [L,B,QSA]

ErrorDocument 404 /error404.html

Options -Indexes

<Files *.php>
    Order Deny,Allow
    Deny from all
    Allow from ::1
</Files>

<Files index.php>
    Order Allow,Deny
    Allow from all
</Files>

.htaccess файл, который находится внутри files каталог:

<Files *.php>
   Allow from all
</Files>

В nginx все конфигурации для конкретного сайта включены в один server блок, и location блоки используются для добавления различных директив конфигурации для определенных URL-адресов.

В целом, философия сильно отличается от Apache2, поэтому вам необходимо изучить ее, чтобы понять, как сделать с ней аналогичную конфигурацию.

В вашем случае директивы конфигурации nginx могут выглядеть примерно так:

location / {
    try_files $uri $uri/ /index.php?rt=$request_uri;
}

location ~ \.php$ {
    deny all;
}

location ^~ /index.php {
    # include here the configuration items from nginx default location ~  \.php$ block
}

location ^~ /files {
    # include here either PHP configuration directives from location ~ \.php$ block if you want PHP scripts executed from here. If you do not want PHP scripts to be executed, then use
    allow all;
}

Эти директивы включены либо в основную конфигурацию nginx, либо в конфигурацию сайта, которая существует в /etc/nginx/sites-available каталог.

Некоторые пояснения к блокам:

Первый location block - это стандартная реализация шаблона фронт-контроллера на nginx. Это означает, что nginx сначала проверяет, находится ли требуемый файл где-то на сервере, а затем отправляет его на сервер, если он существует. В противном случае он отправляет запрос на index.php, с исходной частью URI запроса в качестве аргумента для ?rt. Это немного отличается от вашей реализации, так как вы используете регулярное выражение для ограничения возможных URI, передаваемых в качестве аргумента.

Второй location block отклоняет доступ ко всем URI, заканчивающимся на .php $.

Третий блок добавляет исключение для index.php, который обрабатывается с помощью бэкэнда PHP.

Четвертый блок либо отправляет запросы сценария PHP на серверную часть PHP, либо просто позволяет отправлять их пользователю.

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