使用mod_alias时需要RewriteBase

时间:2015-02-05 09:56:45

标签: apache .htaccess mod-rewrite mod-alias

在我的apache配置中,我创建了一个别名:

<IfModule alias_module>
    Alias /projecten "C:/Users/Youri/SkyDrive/Projecten"
</IfModule>

<Directory "C:/Users/Youri/SkyDrive/Projecten">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride FileInfo Options

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

在文件夹&#39; projecten / mvc&#39;我有一个.htacces文件:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^(.*) public/$1 [L]
</IfModule>

当我访问我的浏览器http://localhost/projecten/mvc/时,收到错误消息:

在此服务器上找不到请求的URL / Users / Youri / SkyDrive / Projecten / mvc / public /。

当我将文件夹(mvc)复制到我的文档根目录并导航到http://localhost/mvc/时,重写有效..

当我添加到我的项目文件夹中的htaccess文件时:

RewriteBase /projecten/mvc

它有效,但我不想添加RewriteBase,因为当我将它放在文档根目录中时我不需要它...

有人可以告诉我出了什么问题吗?

Apache / 2.4.10(Win64)OpenSSL / 1.0.1j配置PHP / 5.6.4

1 个答案:

答案 0 :(得分:0)

这里没有“出错”。您需要指定一个RewriteBase,因为在您正在使用的设置下,事物才能正常工作。

http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewritebase

  

当您在per-directory(htaccess)上下文中的替换中使用相对路径时,此指令 required ,除非满足以下任一条件:
   - 原始请求和替换位于DocumentRoot下方(而不是通过其他方式,例如Alias可到达)。
   - 包含RewriteRule的目录的文件系统路径(以相对替换为后缀)也可用作服务器上的URL路径(这种情况很少见。)

“(而不是通过其他方式可以访问,例如Alias)”就是你在这里所拥有的,所以你需要指定RewriteBase,因为你也在使用你的相对路径取代