Назад | Перейти на главную страницу

Перезапись URL Joomla работает автоматически в Nginx

Это сводит меня с ума, и я не понимаю, как это работает автоматически. У меня есть nginx в качестве веб-сервера, и я установил Joomla с функцией перезаписи URL, которая удаляет index.php из URL. Раньше, когда я использовал Apache, мне приходилось включать .htaccess с помощью RewriteEngine On для того, чтобы это работало. Но с Nginx, когда я включаю «Использовать перезапись URL», он работает автоматически. Я использую только Nginx, который передает файлы php в php-fpm. Вот и все. Я не добавил никаких специальных правил перезаписи, кроме тех, что были указаны в документации Joomla. Я не понимаю, как «Использовать перезапись URL» работает автоматически, когда я включаю его, поскольку для Nginx нет .htaccess.

В Документы Joomla по этой теме тоже не помогло. На втором этапе он говорит

Включите параметр «Использовать Apache mod_rewrite / перезапись URL» и «Сохранить»: этот параметр использует функцию Apache mod_rewrite для удаления части «index.php» из URL-адреса.

.....

Если этот параметр вызывает ошибки, см. Раздел Как проверить, включена ли перезапись мода на вашем сервере. Если он не включен и у вас есть доступ к файлу apache / conf / httpd.conf, откройте этот файл и проверьте, не закомментирована ли строка LoadModule rewrite_module modules / mod_rewrite.so. При необходимости раскомментируйте строку и перезапустите веб-сервер Apache.

Понятия не имею, почему это добавлено в конфигурацию Nginx, поскольку в Nginx нет mod_rewrite. Перезапись URL в бэкэнде Joomla гласит:

Использовать перезапись URL Выберите, чтобы использовать механизм перезаписи сервера для перехвата URL-адресов, соответствующих определенным условиям, и их перезаписи в соответствии с указаниями. Доступно для IIS 7 и Apache. Только для пользователей Apache! Перед активацией переименуйте htaccess.txt в .htaccess. Переименуйте web.config.txt в web.config и установите модуль перезаписи URL-адресов IIS перед активацией.

Он ничего не говорит о Nginx, но все равно работает. Я тут почесываю затылок. Может кто-нибудь сказать мне, как так легко удалить index.php Joomla в Nginx? Это моя конфигурация Nginx Vhost:

server {

        listen 80;
        server_name example.com;
        root /var/www/example/public_html;
        index  index.php index.html index.htm default.html default.htm;

        access_log /var/log/nginx/accn_access.log;
        error_log /var/log/nginx/accn_error.log;

        ##
        # JOOMLA SEF
        ##

        location / {
              try_files   $uri $uri/ /index.php?q=$request_uri;
        }

        ##
        # PHP scripts to FastCGI 
        ##
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;

            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;

        }

}

Видите ... это довольно простая конфигурация. Где происходит волшебство?

Здесь происходит волшебство:

try_files $uri $uri/ /index.php?q=$request_uri;

Это означает, что nginx сначала проверяет, существует ли запрошенный файл или каталог в файловой системе. Если файл не существует, он передает запрос в Joomla и передает исходный URI в q параметр.