У меня проблемы с преобразованием некоторых правил .htaccess на сервер nginx.
RewriteRule ^$ index.php [L]
RewriteRule ^([A-Za-z0-9-]+)?$ index.php?section=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?section=$1&go=$2 [L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?section=$1&go=$2&action=$3 [L]
Может ли кто-нибудь помочь с преобразованием и объяснить, как эти регулярные выражения преобразовываются в nginx?
Я не уверен в синтаксисе, согласно документации nginx, я пробовал следующее:
server {
rewrite ^([A-Za-z0-9-]+)?$ index.php?section=$1&go=$2;
}
Я также пробовал использовать корневой блок, как показано ниже. Я не уверен, как try_files
хотя влияет на это.
location / {
rewrite ^$ /index.php break;
rewrite ^([A-Za-z0-9-]+)?$ /index.php?section=$1 break;
rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2 break;
rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2&action=$3 break;
rewrite ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2&action=$3&id=$4 break;
try_files $uri $uri/ /index.php?$args;
}
Хотя это, похоже, не работает. Нужно ли сначала разместить это в блоке локации?
Я тестирую следующие URL-адреса. Имя хоста удалено, так как мне не разрешено делиться им.
http://www.example.com/entry
http://www.example.com/volunteers
http://www.example.com/contact
В основном страница загружается так, как будто происходит обращение к index.php, а разделы не загружаются, если это имеет смысл. Кажется, что в скрипт index.php ничего не передается.
В location
блок - обычное место для вашего rewrite
директивы, значит, вы поняли.
Единственное, чего явно не хватает в вашей конфигурации, - это ведущий /
в ваших регулярных выражениях:
location / {
rewrite ^/$ /index.php break;
rewrite ^/([A-Za-z0-9-]+)?$ /index.php?section=$1 break;
rewrite ^/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ /index.php?section=$1&go=$2 break;
}