Примерно 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, либо просто позволяет отправлять их пользователю.
В качестве заявления об отказе от ответственности я не могу протестировать эти правила, так как я не знаю вашу программную среду, поэтому они могут не соответствовать вашим требованиям или могут не работать в некоторых частях.