Apache

ЧПУ - человеко-понятные URL

Обычно в адресной строке бывает выражение вида:
http://examplehost/?p=32423&type=view&component=shop&city=77
Такой адрес запомнить практически нереально, а кроме того, поисковик сочтёт его очень похожим на:
http://examplehost/?p=32324&type=view&component=shop&city=79
Много лучше дело бы обстояло с адресом вида:
http://examplehost/shop/samara/viewdetails/?p=32433
поисковики тоже больше любят человеко-понятные адреса.

В большинстве случаев, на хостинге с Apache, уже установлен модуль mod_rewrite. Этот модуль позволяет преобразовывать адреса с помощью файл .htaccess, размещённого в корневой директории сайта.

При обращении по адресу http://examplehost/shop/samara/viewdetails/?p=32433, или к любому другому, начинающемуся с http://examplehost/... , Apache может выполнить преобразование URL по инструкциям, размещённым внутри .htaccess. Пример:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^(admin)$
RewriteBase /
RewriteRule ^(.*)\.(css|js|html)$ $1.$2 [L]
RewriteRule ^(.*)$ index.php?query=$1&%{QUERY_STRING} [L,QSA]

При таком .htaccess Apache перекидывает любые запросы на индексный файл, кроме запросов относящихся к администраторской директории и запросов к css/javascript/html-файлам. Далее, в файле index.php выполняется разбор аргумента query:
$args = split( "/", $_GET["query"] );
$component = array_shift( $args );
$city = array_shift( $args );
таким образом мы получам красивые ЧПУ.

Но можно сделать и произвольные ЧПУ, т.е. связать произвольный URL адрес с любой внутренней страницей своего сайта. Для этого в базе данных заводим таблицу соответствия старых и новых адресов, считываем её в какой-нибудь словарь $urlToReplace (словарь=ассоциативный массив), где ключ - красивый адрес, а значение - тот адрес, который должен был быть. И далее перед $args = split( "/", $_GET["query"] ); выполняем поиск, нет ли подходящей замены:
$query = (array_key_exists( $_GET["query"], $urlToReplace))?$urtToReplace[$_GET["query"]]:$_GET["query"];
$args = split("/", $query);

Настройки через .htaccess

убрать www из адреса субдомена

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]