Тэг ‘apache’

RewriteEngine, RewriteRule и русские буквы в .htaccess

Иногда требуется в .htaccess сделать редирект (внутренний или внешний) при помощи mod_rewrite для ЧПУ адресов с русскими буквами. Но проблема в том, что русские SEO-URL не обрабатываются в .htaccess (за исключением маски .* - любой символ)

Варианты вроде
RewriteRule %EF%E8%F1%FC%EC%EE letter.htm [R=301,L]
RewriteRule Письмо letter.htm [R=301,L]
# пробуем экранировать символ процента
RewriteRule ^(\%) index.php?url=$1

И всё-таки, как написать RewriteRule при кодировании русских ссылок?

RewriteRule ^([0-9-А-Я]+)(/)? index.php [R=301,L]

Методом проб и ошибок установлено, что в правилах, написанных в .htaccess не распознаётся символ %

Один из работающих вариантов, который перенаправляет все обращения к адресу

AddDefaultCharset UTF-8
RewriteRule ^(.*) index.php?url=$1 [L]

Естественно, его следует дополнить условиями (если файл или каталог не существует)

“Нормального” решения, как преобразовать конкретный русский адрес именно в .htaccess я не нашёл.
www.site.ru/русский_URL.html
/%EF%E8%F1%FC%EC

Вот такой код работает, однако перечислять все русские буквы в .htaccess - не есть хорошо
RewriteRule ^([абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯa-zA-Z0-9\%]+)$ index.php?url=$1

Клёвый гайд по RewriteRule http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html

Опубликовано Август 24, 2011 | автор: levik  |  Нет комментариев »

awstats - русификация, кодировки и кракозябры в ключевиках

На многих хостингах встречал установленный awstats. При этом, в разделе переходы по ключевым фразам (Search Keyphrases) вместо привычных русских букв - непонятные кракозябры (ну и англицкие буквы с цифрами проскакивают)

1. смотрим кодировку файла (вид-кодировка- UTF-8). Если после изменения кодировки кракозябры стали русскими буквами, то awstats корректно обрабатывает, но некорректно выводит. Заглядываем в код и.. ищем строчку:

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">

Если кодировка не русскоязычная, следует в файле

/usr/local/etc/awstats/awstats.mysite.com.conf

поменять Lang=”auto” на Lang=”ru”

2. Если кодировка русскоязычная, но “не та” (Utf-8 вместо cp1251 или наоборот) -
исправляем в /usr/local/www/awstats/cgi-bin/lang/awstats-ru.txt
PageCode=windows-1251 на PageCode=utf-8 (или наоборот - выбрать нужное)

3. Еще полезно будет раскомментировать строку конфигурационного файла, включающую decodeutfkeys - помогает, когда поисковые строки в разных кодировках.

Конфиги awstats искать в каталогах (варианты есть, но предсказуемые)

/etc/awstats/awstats.conf
/usr/local/etc/awstats/

http://www.legco.net/entry-348.php

Опубликовано Март 13, 2010 | автор: levik  |  Нет комментариев »

Apache, htaccess и настройки PHP (php_value и php_flag)

Правильная (точнее, желаемая) работа PHP интерпертатора зависит от правильной конфигурации. Конфигурационные настройки PHP или директивы php.ini (php_value или php_flag) можно задавать несколькими способами:

  • в файле php.ini (скорее всего, если у Вас не выделенный сервер, то туда Вас не пустят. Хотя, некоторые хостинги предоставляют возможность создать собственный php.ini. Можно уточнить у хостинг-провайдера… Но в любом случае переживать пока рано, ведь это только первый способ;
  • если PHP используется как модуль Apache (или другого веб-сервера), то можно прописать настройки в файле httpd.conf (файл настроек веб-сервера, к которому пользователя простого хостинга тоже навряд ли допустят);
  • в файле .htaccess (в очередной раз речь про web-сервер, к примеру, Apache) - в последнее время обработка этого файла считается нормой для хостинга. И собственные настройки PHP, как правило, устанавливаются в этих файлах;
  • непосредственно в скриптах php с использованием функции ini_set().

Мы рассмотрели все возможные способы задания конфигурационных настроек интерпретатора PHP (Да, если кто знает другие варианты - сообщите.)

Есть еще маленькое “но”. Не все переменные php_value разрешено изменять в файле .htaccess (в зависимости от настроек сервера, изменение конфигурации PHP пользователем вообще может быть запрещено)

Некоторые настройки (:

php_value register_globals on
php_flag session.use_trans_sid off
php_flag session.use_only_cookies on
php_value max_execution_time 60
php_value upload_max_filesize 8M
php_flag display_errors off
php_flag log_errors on
php_value error_reporting 2047
php_value error_log log-file.txt

UPD шпаргалка по разрешениям изменений настроек PHP:
PHP_INI_USER = 1 значение может быть установлено в пользовательских скриптах
PHP_INI_PERDIR = 2 значение может быть установлено в php.ini, .htaccess или httpd.conf
PHP_INI_SYSTEM = 4 значение может быть установлено в php.ini или httpd.conf
PHP_INI_ALL = 7 значение может быть установлено где угодно

Ищем ошибки в PHP-скриптах (белый экран)
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

Опубликовано Июнь 27, 2009 | автор: levik  |  Комментарий (1) »

htaccess или конфигурируем веб-сервер Apache

.htaccess - служебный файл веб-сервера Apache (и не только), в котором можно указать дополнительные настройки для отдельного сайта или каталога.

Краткая шпаргалка по настройкам в htaccess:

# Кодировка страниц по умолчанию
AddDefaultCharset utf-8

ErrorDocument *собственные страницы ошибок
ErrorDocument 404 /404.htm

#
Options +FollowSymlinks

# запрет выдачи списка файлов при отсутствии индексного файла
Options -Indexes

# запрещаем выводить в списке файлов файлы по маске
Options Indexes
IndexIgnore *.php* *.pl

#разрешаем запуск CGI
Options +ExecCGI

# индексный файл по умолчанию - DirectoryIndex указывается для каталога в котором расположен htaccess и всех нижележащих
DirectoryIndex index.html index.shtml index.pl index.cgi index.php

Запрет доступа к файлам - Deny, Allow

# Запрещаем доступ для всех
Order Deny,Allow
Deny from all
# или запрещаем для всех, кроме “избранных”
Order Deny,Allow
Deny from all
Allow from local.
Allow from 97.23.41.14, 97.23.41.15

#запрещаем просматривать изображения всем, кроме пользователя с IP-адреса
#синтаксис регулярных выражений
<FilesMatch “\.(gif|jpe?g|png)$”>
Order Deny,Allow
Deny from all
Allow from  97.23.41.15
</FilesMatch>

Авторизация пользователя средствами htaccess

AuthName “Control Panel”
AuthType Basic
AuthUserFile /home/www/users/levik/secure/.htpasswd
require valid-user

полный путь к файлу можно определить, выполнив в PHP скрипте команду echo __FILE__;

Считаете нужным добавить? Отпишитесь в комментариях.

Опубликовано Ноябрь 20, 2008 | автор: levik  |  Нет комментариев »

Собственная 404 страница - страницы не существует

404 pages found

Довольно часто, приходя на различные сайты можно увидеть красиво оформленную страницу, на которой значится “Страницы не существует, попробуйте посмотреть что-нибудь ещё”. “Так почему же у меня на белом фоне огромадными буквами высвечивается 404 ERROR?”

Будем исправлять! Тем более, что это не так сложно, а выйгрыш, пожалуй, будет значителен.

Делаем собственную страницу 404 ошибки

“Рецепт” создания своей собственной 404 страницы прост: читать дальше о создании собственной 404 страницы

Опубликовано Сентябрь 12, 2008 | автор: levik  |  Нет комментариев »

Оптимизация web-сервера Apache (черновик)

Скорее шпаргалка, чтоб не забыть… Постепенно дополняется… Причесать будем позже.

Настраиваем Apache - редактируем файл httpd.conf:
# TimeOut: The number of seconds before receives and sends time out.
TimeOut 60

# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to “Off” to deactivate.
KeepAlive On

# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
MaxKeepAliveRequests 100

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
KeepAliveTimeout 10

## Server-Pool Size Regulation (MPM specific)

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves

StartServers 3
MinSpareServers 3
MaxSpareServers 10
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000

KeepAlive On имеет смысл ставить на сайтах с относительно большим количеством изображений. Оптимальное время “таймаута” и количество MaxKeepAliveRequests , скорее всего, имеет смысл подбирать “опытным” путем. Обычно не больше 10-15 секунд. Для файл-хостингов лучше будет выставить KeepAlive Off

MinSpareServers и MaxSpareServers - Spare - “запасной” - неиспользуемые процессы (баланс ресурсов процессора и памяти - на запуск процесса требуется некоторое время, которое можно “сэкономить”, если свободный процесс уже висит в памяти.. Однако, если процессов слишком много, то они занимают лишнюю память)

ServerLimit - максимальное значение MaxClients на “время жизни” процесса;
MaxClients - максимальное количество одновременно запущенных процессов (по сути - клиентов) - чем больше, тем больше одновременных запросов можем обработать (соответственно, занимая больше памяти и используя больше процессорных ресурсов);
если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog;
MaxRequestsPerChild - максимально возможное количество “дочерних” процессов - при переполнении дочерний процесс автоматически завершается

Для изображений (более-менее постоянных) имеет смысл выставить значение Expires, например на месяц
ExpiresActive On
ExpiresByType image/gif "access plus 30 days"
#ExpiresByType image/jpeg "access plus 20 days"
ExpiresByType image/jpeg A2592000

материалы по оптимизации Apache (пополняется)

http://www.greenmice.info/node/98
http://www.salex.ru/book/book.php?httpd_prefork
http://www.xela.ru/2009/03/nastrojka-httpdconf-na-vps-pod-unix-apache/
http://linux.yaroslavl.ru/docs/serv/

memory - информация о CPU и загрузке процессора в реальном времени

netstat -atun | grep -i ‘wait’ | wc -l - количество открытых соединений в режиме ожидания
netstat -atun | grep 'WAIT' | wc -l

Узнать версию ядра и самого линукса и дополнительную информацию:

cat /etc/issue
uname -a
cat /proc/version

Опубликовано Январь 17, 2008 | автор: levik  |  Нет комментариев »

mod_rewrite Примеры

Перенаправление на сайт с www

# нерабочий вариант:
RewriteCond %{SERVER_NAME} !^www.*$
RewriteRule ^(.*)$ http://www.%{SERVER_NAME}/$1 [R]

# рабочий вариант:
RewriteCond    %{HTTP_HOST}            !^www\.
RewriteRule    (.*)                http://www.%{HTTP_HOST}/$1 [R=301,L]

# Перенос наоборот - переносим все что с “www” на БЕЗ “www”
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

Перенаправление http на https и наоборот (вместе не использовать!):


# с http на https
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]
# с HTTPS на HTTP:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

Добавляем закрывающий слэш в конце

# этот вариант почему-то перебрасывал с домена www. на домен без www
RewriteRule ^([a-zA-Z0-9/-]*[^/])$ $1/ [R=301]
#Слегка модифицировал, и редирект стал осуществляться на тот же домен:
RewriteRule ^([a-zA-Z0-9/-]*[^/])$ http://%{HTTP_HOST}/$1/ [R=301]

Как склить index.php , index.html index.asp итд с главной страницей сайта (с корнем:


# при нулевой строке запроса перенаправляем ПОЛНЫЕ вхождения
RewriteCond %{REQUEST_URI} ^/(index.aspx|default.aspx|default.asp|index.asp|index.html|index.htm|index.php)$
RewriteCond %{QUERY_STRING} ^$
RewriteRule .* / [R=301,L]
# проверить на работоспособность
RewriteCond %{REQUEST_URI} ^/index\.(.+)$
RewriteRule .+ / [R=301,L]
# вариант не совсем корректный, т.к. %{THE_REQUEST}
#содержит запрос целиком: GET /index.php HTTP/1.1
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ http://www.yoursite.ru/ [R=301,L]

RewriteCond %{THE_REQUEST} index.html
RewriteRule index.html / [R=301,L]

Убираем index.php из адресов (перенаправляем со страниц вида index.php/page/3 на /page/3):

RewriteCond %{THE_REQUEST} index.php
RewriteRule ^index.php/(.*) /$1 [R=301,L]

Опубликовано Октябрь 5, 2007 | автор: levik  |  Комментарии (2) »