Apache的mod_rewrite url重写

我想用mod_rewrite从http://www.server.com/directory/public重写到http://www.server.com/directory (其中目录然后指向目录/ public)

我尝试了几件事,但我无法弄清楚。 这是我的configuration:

<VirtualHost xxx.xxx.xxx.xxx:443> ServerAdmin [email protected] ServerName www.server.com DocumentRoot /var/www/server.com <Directory /var/www/server.com> RewriteEngine on RewriteCond %{REQUEST_URI} ^/directory RewriteRule ^(.*)$ /directory/public/ [L] </Directory> </VirtualHost> 

尝试改变你的重写规则:

 RewriteRule ^/directory(.*) /directory/public$1 [NC,L] 

你不需要RewriteCond

<Directory >上下文中,重写规则中的URI不以/开头。

对于.htaccess文件中的重写规则中的URI,这也是正确的,因为它们隐含在目录中。

文档的相关部分标题为“ 按目录重写 ”

要解决这个问题,你可以做一个:

  1. 将RewriteRule和RewriteCond移出<Directory >块。
  2. 从RewriteCond和RewriteRule的第二部分删除前导斜杠。
  3. 按照Ivmisooners的build议,也可以将RewriteRule移出<Directory >块。
  4. 按照Ivmisooners的build议,但是从RewriteRule中删除了前导斜线。

如果是我的select,我会使用选项3。


从我阅读上面链接的文档页面,似乎build议您必须启用Options FollowSymLinks使RewriteRules在每个目录上下文中工作。 我从来没有testing过这个。 如果您在获取RewriteRules的时候遇到麻烦,请尝试添加Options +FollowSymLinks