@awe007

Как можно переделать .htaccess под NGINX у самописного движка?

Добрый день. Задали задачку перенести сайт на другой хостинг. Сайт на старом самописном движке, который работает только на php 5.4 и ниже. Сайт в итоге перенёсся нормально, но при клике на любую ссылку открывается главная страница. Я почитал, что это из за того, что не обрабатываются правила rewrite, которые были под apache в .htaccess.

Так как движок самописный, естественно готовых правил под nginx я не нашёл. Попробовал несколько онлайн конвертеров, но результат тот же. Не работают ссылки.

Сам я сисадмин и такого опыта не имею к сожалению :)
Вот правила из .htaccess (домен только заменил)

RewriteCond %{HTTP_HOST} ^mydomain.ru [NC] 
RewriteRule ^(.*)$ http://www.mydomain.ru/$1 [L,R=301] 

RewriteRule ^404/{0,1}$ index.php?module=sitemap [L]

RewriteRule ^adm/{0,1}$ admin.php [L]
RewriteRule ^adm/([a-zA-Z0-9_-]+)/{0,1}$ admin.php?module=$1&%{QUERY_STRING} [L]
RewriteRule ^adm/([a-zA-Z0-9_-]+)/([0-9]+)/{0,1}$ admin.php?module=$1&page=$2&%{QUERY_STRING} [L]
RewriteRule ^adm/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$ admin.php?module=$1&p1=$2 [L]
RewriteRule ^adm/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$ admin.php?module=$1&p1=$2&p2=$3 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9_-]+).html/{0,1}$ index.php?module=static&p1=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/{0,1}$ index.php?module=$1 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$ index.php?module=$1&p1=$2 [L,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$ index.php?module=$1&p1=$2&p2=$3 [L]
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$ index.php?module=$1&p1=$2&p2=$3&p3=$4 [L]


Конвертер предлагает вот такой вариант, но он тоже не работает.

if ($http_host ~* "^mydomain.ru"){
    rewrite ^(.*)$ http://www.mydomain.ru/$1 redirect;
  }
  rewrite "^/404/{0,1}$" /index.php?module=sitemap break;
  rewrite "^/adm/{0,1}$" /admin.php break;
  rewrite "^/adm/([a-zA-Z0-9_-]+)/{0,1}$" /admin.php?module=$1&$query_string break;
  rewrite "^/adm/([a-zA-Z0-9_-]+)/([0-9]+)/{0,1}$" /admin.php?module=$1&page=$2&$query_string break;
  rewrite "^/adm/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$" /admin.php?module=$1&p1=$2 break;
  rewrite "^/adm/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$" /admin.php?module=$1&p1=$2&p2=$3 break;
  if (!-e $request_filename){
    rewrite "^/([a-zA-Z0-9_-]+).html/{0,1}$" /index.php?module=static&p1=$1 break;
  }
  if (!-e $request_filename){
    rewrite "^/([a-zA-Z0-9_-]+)/{0,1}$" /index.php?module=$1 break;
  }
  rewrite "^/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$" /index.php?module=$1&p1=$2 break;
  rewrite "^/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$" /index.php?module=$1&p1=$2&p2=$3 break;
  rewrite "^/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/{0,1}$" /index.php?module=$1&p1=$2&p2=$3&p3=$4 break;


Можно как-то заставить эти ЧПУ ссылки работать?
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
SignFinder
@SignFinder
Wintel\Unix Engineer\DevOps
Поднимите apache на localhost и проксируйте на него запросы с nginx.
Либо просто установите apache и уберите nginx.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@KingstonKMS
Изучить логику написания rewrite под nginx и написать валидные правила, ну или как уже посоветовали, засунуть апач прокладкой или вовсе только на нем хостить сайт
Ответ написан
Комментировать
@awe007 Автор вопроса
Может быть кто-может показать пример переделки какого то одного правила (одной строчки) из htaccess ?
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега htaccess
нет смысла заморачиваться в 404.php
запихни редиректы и все.
дабы пыха их умеет делать легко и непренужденно
а главное не засоряешь htaccess, пока урл не возник никто редирект не пытается обработать.
Ну а редиректы типа ввв вы с легкостью найдете в интернете
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы