mod_rewrite in vhosts configuration

╄→гoц情女王★ 提交于 2019-11-29 06:31:26

This should work if you have mod_rewrite loaded.

<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 serveradmin@bbgi.com
    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>
<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>

This RewriteRule pattern would never match in a directory context (ie. inside a <Directory> container) because of the slash prefix. It would have needed to have been written like this:

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

(The trailing (.*) was superfluous.)

However, since it's in a <Directory> container, any mod_rewrite directives that you have in .htaccess (since you have AllowOverride All) could potentially override this.

If you are using .htaccess and this is undesirable then probably better to take it out of the <Directory> container and have it directly in the <VirtualHost> container (a virtualhost context) - as @Seybsen has done in his answer.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!