Это сводит меня с ума, и я не понимаю, как это работает автоматически. У меня есть 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
параметр.