Конфигурации серверов для использования дружественных URL

Конфигурации серверов для использования дружественных URL Начало работы

Разберем базовые конфигурации серверов: Apache, Nginx и Lighttpd которые должны быть, чтобы работали дружественные URL (ЧПУ) в MODX.

Рабочий образец .htaccess для серверов Apache

Apache HTTP-сервер на текущий момент является самым популярным, его используют не менее 50% всех хостингов мира, очень часто он идет в связке с Nginx.

MODX предоставляет файл ht.access для редактирования в соответствии с настройками вашего сервера. Данный файл появляется после установки CMS. Он находится в корне сайта MODX. Этот файл будет игнорироваться сервером, пока вы не переименуете его в .htaccess.

Для большинства хостингов вам не нужно вносить какие-либо изменения в файл (переименовали и все), чтобы заставить работать friendly URL.

Вот пример строк для работы Дружественных УРЛ:

RewriteEngine On
RewriteBase /

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

На некоторых специфических хостингах (таких мало), нужно выносить файл .htaccess из корня сайта на один уровень выше: в /htdocs или /public_html чтобы он заработал.

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

Nginx Server Config

Вот пример настройки сервера nginx для установки MODX (требуется php-fpm). Этот пример позволяет использовать дружественные URL MODX.

server {
        listen 80;
        server_name example.com www.example.com;
        root /home/sites/example.com;
        index index.php;
        client_max_body_size 30M;
        location / {
                root /home/sites/example.com;
                if (!-e $request_filename) {
                        rewrite ^/(.*)$ /index.php?q=$1 last;
                }
        }
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_ignore_client_abort on;
                fastcgi_param  SERVER_NAME $http_host;
        }

        location ~ /\.ht {
                deny  all;
        }
}

Подключение FastCGI между nginx и PHP, выраженное в строке fastcgi_pass 127.0.0.1:9000; должно быть установлено во что-то вроде fastcgi_pass unix:/var/run/php5-fpm.sock;

Это зависит от того, как настроен файл www.conf (обычно расположен в /etc/php5/fpm/pool.d ). Как настроить директиву «listen» в этом файле: TCP или unix сокет (такой как /var/run/php5-fpm.sock)?

Файл nginx конфигурации должен указать те же соединения в обоих файлах! теоретически сокеты unix будут быстрее, но в таком случае оба ресурса должны быть на одном хосте. TCP полезен в распределенной среде.

Вот еще боевое пример альтернативной конфигурации:

server {
	listen 80;
	server_name www.financetrails.com financetrails.com;
	root /path/to/www.financetrails.com;
	index index.php index.html;

	location / {
		#try to get file directly, try it as a directory or fall back to modx
		try_files $uri $uri/ @modx;
	}

	location @modx {
		#including ? in second rewrite argument causes nginx to drop GET params, so append them again
		rewrite ^/(.*)$ /index.php?q=$1&$args;
	}

	location ~ \.php(.*)$ {
		include fastcgi_params;
		fastcgi_pass backend;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}
}

Так же убедитесь что внутри вашего php.ini есть строка: cgi.fix_pathinfo=0, иначе вы можете подвергнуться атакам через загруженные файлы php.

Руководство по настройке и дружественных URL в Lighttpd

Ниже описана только настройка перезаписи URL и работы дружественных URL (для уже работающей связки lighttpd+mysql+PHP).

lighttpd использует отличную от Apache систему перезаписи адресов. Перезапись URL выполняется в файле lighttpd.conf

  • Сначала нужно убедиться, что модуль перезаписи URL включен.
    • Откройте ваш конфигурационный файл lighttpd.conf (В Linux системах, обычно он располагается /etc/lighttpd/lighttpd.conf).
    • Найдите директиву server.modules.
    • Найдите в этой директиве запись mod_rewrite,.
    • По умолчанию перед ней стоит #. Это символ комментария. Удалите # из строки и сохраните файл.
  • Далее нам нужно найти место, в которое нужно поместить дружественный URL-код. Найдите похожий код:
$SERVER["socket"] == ":80" {
$HTTP["host"] =~ "yourdomainname.com" {
    server.document-root = "/path/to/your/doc/root"
    server.name = "yourservername"
  • Непосредственно под этим вы должны добавить следующий код.
url.rewrite-once = ( "^/(assets|manager|core|connectors)(.*)$" => "/$1/$2",
    "^/(?!index(?:-ajax)?\.php)(.*)\?(.*)$" => "/index.php?q=$1&$2",
    "^/(?!index(?:-ajax)?\.php)(.*)$" => "/index.php?q=$1"
)

Внимание! Lighttpd обрабатывает URL-адреса немного иначе. В файле конфигурации, вы должны исключить любые файлы и/или папки, адреса которых вы не хотите переписывать. В приведенном выше примере исключены каталоги/файлы (assets | manager | core | connectors). Если вы хотите добавить к исключениям ещё, что-то просто добавьте еще один |, а затем укажите имя файла/папки, которые вы хотите пропустить при переписывании URL.

Теперь дружественные URL будут работать.

Rate article
MODX 3

This site uses Akismet to reduce spam. Learn how your comment data is processed.