1

我有一个在 Windows 上的 XAMPP 上运行的站点。该站点的根目录位于 localhost/sitename/。

我使用 .htaccess 和 mod_rewrite 使 index.php?app=appname 出现在 sitename/appname/ 或 sitename/appname 中。

当我通过站点名称/应用程序名称(不带斜杠)访问应用程序时,一切都很好。浏览器在 sitename/assets/.. 中找到我的图像和 css,因为它们是相对于当前页面找到的。

问题是,当我通过 sitename/appname/(带有斜杠)访问应用程序时,浏览器找不到我的 assets 文件夹,因为它现在正试图在 sitename/appname/assets/ 中查找。

如果不重写资产文件夹,我该怎么做才能解决这个问题?

4

3 回答 3

2

问题是,当我通过 sitename/appname/(带有斜杠)访问应用程序时,浏览器找不到我的 assets 文件夹,因为它现在正试图在 sitename/appname/assets/ 中查找。

尾部斜杠正在更改您的相对 URI 的基础。如果不使用 mod_rewrite voodoo 来解决此问题,您需要使用<base>标签在页面标题中添加正确的基础:

<base href="/sitename/appname/">

或任何适当的基础应该是。

于 2012-09-09T18:49:05.167 回答
1

我猜如果没有斜杠,您的浏览器会认为当前目录是/sitename/,而如果使用斜杠,您的浏览器会认为当前目录是/sitename/appname/.

因此,任何具有相对路径(不以正斜杠开头)的资产(例如)"assets/image.png"都将被假定为基于当前目录。要解决此问题,您可以将所有资产路径更改为锚定到根的绝对路径,方法是使用正斜杠开始路径,因此前面的示例将变为"/sitename/assets/image.png". 但我认为,尽管您希望避免重写资产路径,但以下内容更简单:

RewriteRule ^/sitename/appname/assets/(.+)$ /sitename/assets/$1

这将捕获对不存在路径的任何丢失请求,appname/assets并将它们引用到正确的/sitename/assets路径。

于 2012-09-09T18:03:02.867 回答
0

查看在 index.php 上查看地址为 www.example.com/permalink-to-post/ 的帖子时 WordPress 如何处理此问题,似乎最好的答案是对所有链接、图像和 CSS 使用绝对文件路径。

在这种情况下,到 /assets/ 文件夹的每个链接都应该是http://localhost/sitename/assets/. (直到该站点位于实时 Web 服务器上)

于 2012-09-10T06:48:51.150 回答