【问题标题】:Using relative URLs with mod_rewrite在 mod_rewrite 中使用相对 URL
【发布时间】:2009-08-28 15:51:26
【问题描述】:

环境: Mac OS X Leopard 附带 Apache 2;默认 httpd.conf 没有大的变化。

我正在通过我的 .htaccess 设置一些重写,但我无法使用相对于当前目录的目标路径。

# URL: http://localhost/~davis/rewrite/.htaccess
# File: /Users/davis/Sites/rewrite/.htaccess

RewriteRule go.php target.php

# Not working

我希望规则将用户重定向到http://localhost/~davis/rewrite/target.php。它正在解析正确的物理路径,但给了我一个 404 说路径 /Users/davis/Sites/rewrite/target.php 不存在。

如果我提供完整的 URL,它会很好。

# URL: http://localhost/~davis/rewrite/.htaccess
# File: /Users/davis/Sites/rewrite/.htaccess

RewriteRule go.php /~davis/rewrite/target.php

# Works

我在这里遗漏了什么吗?在 httpd.conf 中有什么需要设置的吗?

谢谢!

编辑:相对 URL 在我的实时 Linux 服务器上正常工作。我在本地的 Mac 盒子里遇到了问题。

【问题讨论】:

    标签: apache macos .htaccess mod-rewrite


    【解决方案1】:

    尝试调整基本网址:

    RewriteBase /~davis/rewrite/
    

    【讨论】:

    • 感谢秋葵的建议。但我的目标是使 .htaccess 独立于安装应用程序的服务器目录。如果我们使用 RewriteBase,我们仍然需要将它设置到正确的目录。另一方面,如果我可以提供相对于当前目录的 URL,那几乎可以解决问题。
    【解决方案2】:

    终于解决了!

    如果我将DocumentRoot 设置为我的~/Sites 目录或为该路径创建VirtualHost,它就会开始工作。显然,在用户目录设置中,Apache 无法将物理路径映射到 ~username 别名。

    感谢大家的投入!

    【讨论】:

    • 你能详细解释一下这个解决方案吗?
    • 默认情况下,我将使用 URL localhost/~davis 访问我的本地站点,其中 davis 是我的用户名。但是在这种设置下,我无法使用相对的 RewriteRules。我所做的是将 Apache httpd.conf 中的 DocumentRoot 设置更改为直接指向我的站点文件夹: DocumentRoot "/Users/davis/Sites" 这解决了问题。现在,我通过localhost 直接访问我的本地站点。你可以在 /etc/apache2/ 下找到 conf 文件希望这个解释有帮助:)
    【解决方案3】:

    你可以试试 RewriteBase,但除此之外我认为你无能为力。

    RewriteBase /~davis/rewrite/
    

    【讨论】:

    • 问题是,相对路径在我的 Linux 服务器和本地 Windows 机器上都可以正常工作。我想知道这是否与用户目录的设置方式有关(~davis 等)。
    猜你喜欢
    • 2019-03-28
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多