mod_rewrite - сбой на HTTP-хосте - PullRequest
       24

mod_rewrite - сбой на HTTP-хосте

1 голос
/ 12 октября 2010

Я пытаюсь переписать URL-адрес - но по какой-то причине он работает не так, как я ожидал (я, вероятно, пропустил что-то очень простое!).

У меня есть два сайта - www.domain.local и admin.domain.local.Используя приведенный ниже файл .htaccess, перезапись общедоступного сайта в порядке, но сайт администратора работает не так, как ожидалось, так как он подхватывается первым условием (хотя вывод HTTP_HOST показывает, что я смотрю на администраторадомен сайта).

Options -MultiViews
Options +FollowSymLinks

RewriteEngine on
RewriteBase /

## Force www
RewriteCond %{HTTP_HOST} ^domain\.local$ [NC]
RewriteRule ^(.*)$ http://www.domain.local/$1 [R=301,L]

## Public site rewrites   
RewriteCond %{HTTP_HOST} ^www\.domain\.local$ [NC]
RewriteRule ^(home)(/)?$ /index.php [NC]
RewriteRule ^([a-z0-9+-]+)(/)?$ /$1.php [NC,L]

## Admin site
RewriteCond %{HTTP_HOST} ^admin\.domain\.local$ [NC]
RewriteRule ^([a-z0-9+-]+)(/)?$ /manage/$1.php [QSA,L]

Что я делаю не так?

Большое спасибо, Кев

1 Ответ

3 голосов
/ 12 октября 2010

A RewriteCond применяется только к следующей директиве RewriteRule, поэтому в вашем случае администратор RewriteRule никогда не получит шанса выполнить, потому что это безусловное правило применяется первым:

RewriteRule ^([a-z0-9+-]+)(/)?$ /$1.php [NC,L]

Есть несколько способов исправить это, но самым простым будет изменить раздел вашего публичного сайта, включив в него условие для второго правила:

## Public site rewrites   
RewriteCond %{HTTP_HOST} ^www\.domain\.local$ [NC]
RewriteRule ^(home)(/)?$ /index.php [NC]
RewriteCond %{HTTP_HOST} ^www\.domain\.local$ [NC]
RewriteRule ^([a-z0-9+-]+)(/)?$ /$1.php [NC,L]
...