1

提前感谢您的帮助。

这就是我所在的位置以及我要完成的工作:

  • 我在 /home/username/code/project/static/ 中有静态文件
  • 我的文档根目录是 /home/username/public_html/ (这是我的 .htaccess 文件所在的位置)。
  • 我正在尝试在 .htaccess 文件中使用以下内容(我无权访问 httpd.conf):

    RewriteRule ^(static/.*)$ /home/username/code/project/static/ [L]
    

    但如果我正确理解了 mod_rewrite 的文档(见下文),“/home/username/code/project/static/”将被视为相对于我的文档根目录的文件系统路径或 URL 路径,而不是绝对的我想要的文件系统路径。

我尝试使用“~/code/project/static/”和“../code/project/static/”,但在尝试访问我的页面时出现内部服务器错误(是的,我有点菜鸟)。

所以我的问题是:有没有办法将 .htaccess 上下文中使用的重写规则替换为绝对文件系统路径,而不是相对于我的 DocumentRoot 的路径?

这是 mod_rewrite 文档的摘录供参考(可以在这里找到完整的:http ://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule ):

例如,如果您指定 /www/file.html 的替换字符串,那么这将被视为 URL 路径,除非在根目录或文件系统中存在名为 www 的目录(或者,在使用重写的情况下在 .htaccess 文件中,相对于您的文档根目录),在这种情况下,它将被视为文件系统路径。

任何帮助都感激不尽 :)

谢谢!

4

1 回答 1

2

完成您想要做的事情的一种方法是在 public_html 中创建一个static指向/home/username/code/project/static/. 这需要选项指令文档FollowSymlnks中详述的选项,但在完整的 Apache 配置中可能不允许使用,这是您无法控制的。

更好的方法是反转链接 - 将 public_html/static 设置为保存真实文件的位置,然后将 /home/username/code/project/static 设置为指向 public_html/static 的符号链接。这避免了对特定 .htaccess 规则的任何需要。由于您似乎无论如何都希望使该目录下的文件可公开访问,因此它在安全方面也更好,因为它将可公开访问的文件全部保存在相同的目录结构下,并避免因允许符号链接而产生的潜在安全问题去从 Web 根目录到文件系统的其他区域。

于 2013-02-15T18:41:22.293 回答