2

我一直在到处寻找这个问题的答案,我似乎找不到任何简单的解决方案。我不明白为什么这么简单的事情会这么复杂。

所以基本上 - 我想做的是在我的 apache 上映射一些本地站点,每个站点都有自己的 css/js 等。然后在我的 apache conf 中我设置了一些别名:

# site 1
Alias /site1 "C:/www/site1"
<Directory "C:/www/site1">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

# site 2
Alias /site1 "C:/www/site2"
<Directory "C:/www/site2">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

现在,当我转到 url:http://localhost/site1/时,将提供 site1 的内容 - index.html 正在加载。一切都好。在我的文件中,我使用绝对路径从文件夹链接 css 和 js - 例如/css/styles.css/js/scripts.js.

当通过 apache 提供这些文件时,它们将获得以下路径:

http://localhost/css/styles.css(忽略'site1'),原因当然是因为我要求通过指定绝对路径从我的webroot'localhost'开始。

为什么是绝对路径?我需要能够将我的 .html 文件更深入地移动到我的网站的文件夹结构中——这意味着相对于它们的位置——他们无法知道资源文件在哪里——除非我可以告诉他们从某个点开始——网络根。

所以问题是:

没有任何简单的方法可以告诉我的 Alias 设置,任何被要求的文件 - 使用绝对路径,都应该http://localhost/sitex/*http://localhost/*. 换言之,基本路径被改变。

我尝试过 AliasMatch、DirectoryMatch、RewriteRules RewriteBase,但似乎都无法改变这一点。

也许我应该使用 Alias 以外的东西?

4

1 回答 1

1

尝试非常仔细地阅读 Apache RewriteRule 文档。如果你想改变一些东西,你需要了解那些基本的东西(我在这里给你我的“很多天的尝试和搜索”):

  • SCRIPT_FILENAME不同于REQUEST_URI. 如果您应用了一些重写规则并更改了 URI,那么您需要比较SCRIPT_FILENAME,因为REQUEST_URI永远不会改变(来自我自己的实验,但我可能错了)
  • 如果您/web/htdocs/olivier/zer/szzae/Symfony/web/app.php在重写规则中放置了一个完整的文件名(例如 ),而不是相对URI,那么在比较和重写规则中这将被区别对待。

因此,根据您的需要,也许您在技术上尝试做的并不是解决问题的正确方法。

您可以执行以下操作(未尝试过,但我在我的网站中使用了其中的一些):

# if this is a static file, extract the extension into `EXT`:
RewriteRule (.*)(\.(css|js|txt|pdf|jpg|jpeg|gif|png|ico))$ $1$2 [NC,QSA,E=EXT:$3]
# .. do some processing then ..
# if the file is css or js (modify it for your needs)
RewriteCond %{ENV:EXT} (css|js|txt)$
# then here's the hint that may save your life!!
# rewrite the file to "previous" content
# AND whole filename, *not* relative URI
RewriteRule  ^(.+) %{DOCUMENT_ROOT}/..%{REQUEST_FILENAME} [QSA,L]    

您可以添加一个条件:如果在您的“基本”目录中找到文件,则覆盖,否则让 Apache “自然”处理它(= 尝试从网站本身获取它):

# checks if it exists, and if so then
RewriteCond %{DOCUMENT_ROOT}/..%{REQUEST_FILENAME} -f
RewriteRule  ^(.+) %{DOCUMENT_ROOT}/..%{REQUEST_FILENAME} [QSA,L]    

注意:我没有测试过:尝试使用/..%{REQUEST_FILENAME}or /../%{REQUEST_FILENAME}(注意/

现在是阅读时间:在此处阅读直通指令。

希望这可以帮助!

于 2013-09-23T09:34:42.150 回答