Статьи

Начало работы: методы Apache mod_rewrite

Модуль mod_rewrite в Apache, по-видимому, является одной из областей администрирования Apache, которая вызывает большинство вопросов. Я, кажется, вечный новичок, когда дело доходит до переписывания URL, и я продолжаю постоянно придумывать невыполнимые желания.

Я также беспокоюсь о своих лучших коллегах по созданию своего арсенала. Тем не менее, просмотрев множество запросов к этому мощному модулю, я подумал, что обмен некоторыми из моих любимых (и основных) вариантов переписывания поможет тем, кто ищет ответы.

Кроме того, я уверен, что у нас есть несколько скрытых переписывающих ниндзя, которые висят вокруг сообщества SitePoint, что добавит немного недостающей магии, которую мы все можем использовать.

В заключение, мои знания о переписывании пришли почти исключительно из чтения и перечитывания (и перечитывания!) Документов Apache HTTP и некоторых серьезных поисков по этой теме в течение многих лет. Регулярные выражения могут быть как вашим другом, так и вашим врагом! ;>)

Они обычно добавляются либо в ваш файл httpd.conf, либо в файл .htaccess. Для получения отличного совета по htaccess, если вы используете этот маршрут — посмотрите это .

Перенаправление субдомена в домен:


RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*).mydomain.com$
RewriteCond %{HTTP_HOST} !^www.mydomain.com$
RewriteRule (.*) http://mydomain.com/%1$1 [P]

Или, если вы хотите использовать www.mydomain.com — даже если посетители используют mydomain.com, чтобы попасть на ваш сайт:


RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.mydomain.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R,L]

Возможно, у вас есть каталог, на который нужно направить посетителей в DocumentRoot, который содержит ваши страницы входа (например, сайт бета-тестирования):


RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.betadomain.com$
RewriteCond %{REQUEST_URI} !^/beta/
RewriteRule ^(.*)$ /beta/$1

Постоянное перенаправление пользователей (и поисковых систем) на новый домен из старого домена во время миграции (и предоставление им возможности перейти на нужную страницу вместо просто страницы корневого индекса нового сайта).


RewriteEngine on
RewriteCond %{HTTP_HOST} ^olddomain.com$
RewriteRule ^(.*)$ http://newdomain.com$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.olddomain.com$
RewriteRule ^(.*)$ http://newdomain.com$1 [R=301,L]

И, наконец, я вижу много вопросов о URL, дружественных для поисковых систем, и динамических страницах. Я использовал это простое переписывание, которое я узнал от друга — однако, это — то, где некоторый вклад был бы большим, поскольку я вижу эти вопросы снова и снова на форумах. Обязательно добавьте свои лучшие методы переписывания для работы с динамическими страницами. Я не использую эту последнюю тактику слишком часто, и она довольно элементарна.

Разрешить www.domain.com/news5.phpwww.domain.com/news.php?id=5


RewriteEngine on
RewriteBase /articles
RewriteRule ^news([^\.]+)\.php$ news.php?id=$1