Mod_rewrite в конфигурации vhosts

Я пытаюсь добавить правила mod_rewrite в конфигурацию vhost, но он не работает. Для сайта "mysite.com" я хочу перенаправить "/webmedia/" на домашнюю страницу.

Вот что у меня есть:

<VirtualHost 192.168.100.142:80>
    ServerAdmin [email protected]
    DocumentRoot /home/drupal_1
    ServerName mysite.com
    ServerAlias www.mysite.com
    Alias /movies /home/movies/
    ErrorLog /var/log/httpd/mysite.com_err_log
      CustomLog /var/log/httpd/mysite.com_log special
    <Directory /home/drupal_1>
      Options FollowSymLinks Includes ExecCGI
              AllowOverride All
              DirectoryIndex index.html index.htm index.php

      # Rewrite Rules #####################
      RewriteEngine On
      RewriteRule ^/webmedia/(.*) / [R=301,L]
      # end Rewrite Rules #################

    </Directory>
    <Directory /home/movies>
      Options FollowSymLinks Includes ExecCGI
              AllowOverride All
              DirectoryIndex index.html index.htm index.php
    </Directory>

</VirtualHost>

Ответ 1

Это должно работать, если вы загрузили mod_rewrite.

<Directory /home/drupal_1>
    Options FollowSymLinks Includes ExecCGI
    AllowOverride All
    DirectoryIndex index.html index.htm index.php
</Directory>
<Directory /home/movies>
    Options FollowSymLinks Includes ExecCGI
    AllowOverride All
    DirectoryIndex index.html index.htm index.php
</Directory>
<VirtualHost 192.168.100.142:80>
    ServerAdmin [email protected]
    DocumentRoot /home/drupal_1
    ServerName mysite.com
    ServerAlias www.mysite.com
    Alias /movies /home/movies/
    ErrorLog /var/log/httpd/mysite.com_err_log
    CustomLog /var/log/httpd/mysite.com_log special

    # Rewrite Rules #####################
    RewriteEngine On
    RewriteRule ^/webmedia/(.*) / [R=301,L]
    # end Rewrite Rules #################   
</VirtualHost>

Ответ 2

<Directory /home/drupal_1>
  Options FollowSymLinks Includes ExecCGI
          AllowOverride All
          DirectoryIndex index.html index.htm index.php

  # Rewrite Rules #####################
  RewriteEngine On
  RewriteRule ^/webmedia/(.*) / [R=301,L]
  # end Rewrite Rules #################
</Directory>

Этот шаблон RewriteRule никогда не будет совпадать в контексте каталога (т.е. внутри контейнера <Directory>) из-за префикса косой черты. Это должно было быть написано так:

RewriteRule ^webmedia/ / [R=301,L]

(Трейлинг (.*) Был излишним.)

Однако, поскольку он находится в контейнере <Directory>, любые директивы mod_rewrite, которые есть у вас в .htaccess (поскольку у вас есть AllowOverride All), потенциально могут это переопределить.

Если вы используете .htaccess а это нежелательно, то, вероятно, лучше вынуть его из контейнера <Directory> и virtualhost его непосредственно в контейнер <VirtualHost> (контекст virtualhost) - как это сделал @Seybsen в своем ответе.