Apache mod_rewrite 网址重写

Apache mod_rewrite 网址重写

我想用 mod_rewrite 重写一个 URLhttp://www.server.com/directory/publichttp://www.server.com/directory(其中目录将指向目录/public)

我尝试了几种方法,但还是没能解决。以下是我的配置:

    <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>

答案1

尝试将重写规则更改为:

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

你不需要 RewriteCond

答案2

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

对于文件中重写规则的 URI 来说也是如此,.htaccess因为它们隐式位于目录中。

文档的相关部分标题为“每个目录重写

要修复此问题,您可以执行以下操作之一:

  1. 将 RewriteRule 和 RewriteCond 移出<Directory >块。
  2. 从 RewriteCond 和 RewriteRule 的第二部分中删除前导斜杠。
  3. 遵循 Ivmisooners 的建议,但也要将 RewriteRule 移出<Directory >块。
  4. 按照 Ivmisooners 的建议,但从 RewriteRule 中删除前导斜杠。

如果由我选择,我会使用选项 3。


从我阅读上面链接的文档页面来看,似乎建议你必须Options FollowSymLinks启用 RewriteRules 才能在每个目录上下文中工作。我自己从未测试过这一点。如果你无法让 RewriteRules 在该块内工作<Directory >,请尝试添加Options +FollowSymLinks

相关内容