我在Windows上的XAMPP上运行了一个站点。该站点的根目录位于localhost / sitename /.
我使用.htaccess和mod_rewrite使index.php?app = appname出现在sitename / appname /或sitename / appname。
当我通过sitename / appname访问应用程序时(没有斜杠),一切都很好。浏览器在sitename / assets / ..找到我的图像和CSS,因为它们是相对于当前页面找到的。
问题是,当我通过sitename / appname /(带斜杠)访问某个应用时,浏览器找不到我的资产文件夹,因为它现在正试图查看sitename / appname / assets /。
如果没有mod重写assets文件夹,我该怎么做才能解决这个问题?
答案 0 :(得分:2)
问题是,当我通过sitename / appname /(带斜杠)访问某个应用时,浏览器找不到我的资产文件夹,因为它现在正试图查看sitename / appname / assets /。
尾部斜杠正在改变相对URI的基础。如果不使用mod_rewrite voodoo来解决此问题,则需要使用<base>
标记在页眉中添加正确的基数:
<base href="/sitename/appname/">
或任何适当的基础应该是。
答案 1 :(得分:1)
我猜测如果没有斜杠,浏览器认为当前目录为/sitename/
,而使用斜杠,浏览器会认为当前目录为/sitename/appname/
。
因此,假设任何具有相对路径(不以正斜杠开头)的资产(例如"assets/image.png"
)将基于当前目录。要解决此问题,您可以通过使用正斜杠启动路径,将所有资产路径更改为锚定到根的绝对路径,因此前一个示例将变为"/sitename/assets/image.png"
。但我认为,尽管您希望避免重写资产路径,但以下内容更为简单:
RewriteRule ^/sitename/appname/assets/(.+)$ /sitename/assets/$1
这将捕获对不存在的appname/assets
路径的任何丢失请求,并将它们引用到正确的/sitename/assets
路径。
答案 2 :(得分:0)
看看在使用地址www.example.com/permalink-to-post/在index.php上查看帖子时WordPress如何处理这个问题,似乎最好的答案是使用绝对文件路径到所有链接,图像和CSS。
在这种情况下,/ assets /文件夹的每个链接都应为http://localhost/sitename/assets/
。 (直到该站点在实时Web服务器上)