Я новичок в движке перезаписи nginx. Я пытаюсь преобразовать свой старый файл htaccess в формат nginx, но у меня проблемы.
# ------------------------------------------------------ #
# This redirects index.php to / #
# ------------------------------------------------------ #
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(index|index\.php)\ HTTP/
RewriteRule ^(index|index\.php)$ http://domain.com/ [R=301,L]
# ------------------------------------------------------ #
# This rewrites 'directories' to their PHP files, #
# fixes trailing-slash issues, and redirects .php #
# to 'directory' to avoid duplicate content. #
# ------------------------------------------------------ #
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)$ $1.php [L]
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*)/$ http://twitstamp.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^.]+\.php\ HTTP/
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^.]+)\.php$ http://twitstamp.com/$1 [R=301,L]
# ------------------------------------------------------ #
# If it wasn't redirected previously and is not #
# a file on the server, rewrite to image #
# ------------------------------------------------------ #
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9_\-@#\ "'\+]+)/?([a-z0-9_\-]+)?(\.png|/)?$ generation/image.php?user=${escapemap:$1}&template=${escapemap:$2} [NC,L]
Это мой файл htaccess. Вот что у меня есть ...
# ------------------------------------------------------ #
# This redirects index.php to / #
# ------------------------------------------------------ #
if ($request_uri ~* "^/index.php\??$") {
rewrite ^.*$ http://$host? permanent;
}
# ------------------------------------------------------ #
# This rewrites 'directories' to their PHP files, #
# fixes trailing-slash issues, and redirects .php #
# to 'directory' to avoid duplicate content. #
# ------------------------------------------------------ #
if (!-e $request_filename) {
rewrite ^(.*)$ $1.php;
last;
}
# ------------------------------------------------------ #
# If it wasn't redirected previously and is not #
# a file on the server, rewrite to image #
# ------------------------------------------------------ #
if (!-e $request_filename) {
rewrite ^([a-z0-9_\-@#\ "'\+]+)/?([a-z0-9_\-]+)?(\.png|/)?$ generation/image.php?user=$1&template=$2;
break;
}
Перенаправление index.php работает нормально, как и перенаправление "имя каталога" -> файл php. Однако я не могу понять, как сделать несколько вещей: реализовать исправление косой черты и перенаправить файлы .php извне, чтобы у меня не было дубликатов файлов. Я хочу, чтобы все страницы выглядели чистыми, например, / help, / about и т. Д. Настоящие страницы на сервере имеют формат /about.php. Кроме того, я не могу получить правило перезаписи для работающих изображений. Я хочу, чтобы все, что не являлось настоящим файлом или каталогом (флаг -e), а не перезаписываемым файлом (например, / about), перенаправлялось на создание / и т. Д.
Вы ошибаетесь. Nginx любит блоки местоположения, например, для перенаправления /index.php в /, что вы бы сделали.
location = /index.php {
rewrite ^ http://domain.com/$args permanent;
}
Вы также захотите изучить файл try_files. В общем, если вы используете if в Nginx, скорее всего, вы делаете это неправильно.
Я рекомендую прочитать это, чтобы получить базовое представление о том, как Nginx использует серверные блоки и блоки местоположения: http://blog.martinfjordvald.com/2010/07/nginx-primer/