Перенаправление первой части example.com/site/var
на site.example.com/var
.
Второе правило перезаписи, переписать свой URL в site.example.com,
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^(www\.)?example.com/site/(.*)
RewriteRule (.*) http://site.example.com/%1 [R=301,L]
RewriteRule ^([^/\.]+)$ /site/?var=$1 [L]
Объяснение:
ПереписатьEngine на
эта строка включает перезапись двигателя. иначе это может не сработать.
RewriteBase /
эта строка устанавливает базу перезаписи. эта директива используется, когда вы хотите установить базовый URL для перезаписей для каждого каталога. значением по умолчанию является текущий физический путь, но в большинстве случаев URL-база в НЕ напрямую связана с физическими путями к именам файлов, поэтому использовать по умолчанию неправильно. Например, при использовании виртуального каталога вы должны правильно установить эту опцию, чтобы mod_rewrite действовал хорошо.
RewriteCond% {HTTP_HOST}% {REQUEST_URI} ^ (www.)? Example.com/site/(.*)
в этой строке первый apache присоединяется к переменной (адрес хоста: www.example.com
и URI запроса: /site/var
). тогда это проверяет результат с образцом, который я дал. первый результат может быть www.
. после этого должно быть example.com/site/
и в конце может быть что угодно.
RewriteRule (.*) http://site.example.com/%1 [R=301,L]
эта строка перенаправляет запрос пользователя на http://site.example.com/%1
с кодом статуса 301. поскольку у него есть флаг L
, это последнее правило перезаписи проверки Apache. %1
- это все, что помечено (.*)
в состоянии перезаписи.
RewriteRule ^([^/\.]+)$ /site/?var=$1 [L]
эта строка является строкой, которую вы задали в своем вопросе: она перезаписывает каждый URL, который не имеет /
и имеет точку /site/?var=$1
.