Я пытаюсь преобразовать правила перезаписи
из файлов .htaccess
в конфигурацию nginx
. как часть переноса сайта на веб-сервер NGINX
.
вот правила перезаписи из .htaccess
файла
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.php$
RewriteCond %{REQUEST_URI} !\.gif$
RewriteCond %{REQUEST_URI} !\.jp?g$
RewriteCond %{REQUEST_URI} !\.png$
RewriteCond %{REQUEST_URI} !\.css$
RewriteCond %{REQUEST_URI} !\.js$
RewriteCond %{REQUEST_URI} !\.html$
RewriteCond %{REQUEST_URI} !\.xhtml$
RewriteCond %{REQUEST_URI} !\.htm$
RewriteCond %{REQUEST_URI} !\.ico$
RewriteRule (.*) index.php [L]
RewriteRule (.*).html index.php [L]
моей текущей конфигурации nginx
.
server {
listen 80;
server_name example.com;
root /usr/share/nginx/html;
location / {
index index.php index.html index.htm;
}
location ~ \.(php)$ {
try_files $uri =404;
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location !~* .(css|js|html|htm|xhtml|php|png|gif|ico|jpg|jpeg)$ {
# Matches requests ending in png, gif, ico, jpg or jpeg.
rewrite ^(.*)$ /index.php break;
rewrite (.*).html /index.php break;
}
}
домашняя страница работает, но внутренние ссылки сайта дают 404.
до сих пор я пробовал много правил перезаписи, подобных этим.
if ( $uri ~ ^/(?!(\.css|\.js|\.html|\.htm|\.xhtml|\.php|\.png|\.gif|\.ico|\.jpg|\.jpeg))) {
rewrite ^/(.*)$ /index.php break;
}
но иногда внутренняя ссылка работает, при перенаправлении всех статических файлов, таких как .css, .js, на домашнюю страницу ,
и иногда я не могу получить доступ к / administrator /
моего сайта, он перенаправляет на домашнюю страницу.
как я могу реплицировать правила перезаписи .htaccess
на nginx
?
На мой взгляд, это похоже на стандартный шаблон фронт-контроллера. В nginx это реализовано следующим образом:
server {
listen 80;
server_name example.com;
root /usr/share/nginx/html;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.(php)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Логика заключается в том, что сначала он пытается определить, существует ли запрошенный ресурс в виде файла или каталога. Если он существует, он возвращается клиенту. В противном случае запрос передается в сценарий PHP, который затем определяет контент, который должен быть возвращен клиенту.