Пример 2: создание дружественных адресов URL
Допустим, вы написали PHP скрипт display_article.php для вывода статей на вашем сайте. Вы можете ссылаться на статью с помощью следующего адреса URL:
1
http://www.example.com/display ... ticle
Данный адрес выглядит уродливо и запрос внутри него (?articleId=my-article) может смущать некоторые поисковые механизмы. Гораздо лучше использовать адрес URL такого вида:
1
http://www.example.com/article ... icle/
Вы можете задействовать mod_rewrite для преобразования ссылок первого формата во второй, что даст возможность использовать дружественные ссылки на страницах сайта, а обращение будет выполняться к реальным адресам, не видимым никому. Для этого файл .htaccess, расположенный в корневой директории вашего сайта, должен содержать следующие строки:
1
RewriteEngine on
2
RewriteRule ^articles/([^/]+)/?$ display_article.php?articleId=$1 [L]
Описание правила RewriteRule:
^articles/([^/]+)/?$ - регулярное выражение, соответствующее любому URL в формате articles/(article ID)/. Оно гласит:"соответствует началу URL (^) , за которым следует текст articles/, за которым следует один или более символов, не являющиеся слэшем ([^/]+), за которыми может следовать слэш (/?), за которым следует символ окончания URL ($)". Обратите внимание на круглые скобки вокруг части шаблона [^/]+. Таким образом текст, соответствующей данной части, например, "my-article", сохраняется для дальнейшего использования.
display_article.php?articleId=$1 - данная часть правила указывает серверу Apache использовать скрипт display_article.php , которому передается текст, соответствующий подшаблону [^/]+ из регулярного выражения первой части (например, "my-article"), в качестве параметра articleId. $1 называется обратной связью и хранит текст соответствующий подшаблону. Если регулярное выражение содержит еще один подшаблон в круглых скобках, то соответствующий ему текст будет храниться в переменной $2, и так далее.
[L] - как и в предыдущем примере мы используем флаг для остановки дальнейшей обработки URL, чтобы не произошло изменение адреса другими правилами RewriteRule.
Выше приведенное правило RewriteRule берет запрашиваемый URL в формате
http://www.example.com/article ... icle/ и преобразует его в URL вида
http://www.example.com/display ... ticle.