我正在构建一个 MVC 应用程序,我在 html 中的 css 文件、js 和图像的路径方面遇到了一些问题......我得到了一个解决方案,使用 <base>
标签来定义所有 html 文件遵循的路径,例如:<base href="http://localhost/mvc/>
,只是来回安装 javascript 插件时遇到了一些问题,因为例如,当我href="#"
单击而不是不执行任何操作时,链接将我带到使用 <base>
标签定义的 URL 将被http://localhost/mvc/#
, 我想知道如何将这些文件的所有"请求"重定向到子文件夹,例如:
<link rel="stylesheet" href="main.css">
<img src="images/img2.jpg" />
所有请求都指向一个子文件夹,例如 PUBLIC,只需要在该公共中设置 html 文件夹......
HTACCESS 文件:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
的相对URL abc/def/file.js
会导致浏览器(!!(在其前面添加当前路径并发出请求。假设您正在浏览http://domain.com/folder/file.html
结果将是 http://domain.com/folder/abc/def/file.js
.
<base>
标记只是更改此操作的引用点,因为它不采用当前 URL 的基本路径,而是采用 base 中给出的值。这必须是绝对的。这就是事情通常变得更加复杂的地方:尝试省略一般的base
!
#
不会改变任何东西,因为它是一个(这里缺少的(片段的开始。 http://doamin.com/file.js
和http://doamin.com/file.js#
实际上与#
应该仅由浏览器而不是服务器解释相同。
此外,如果您的 MVC 实现正在执行<a href='#' onclick='somejsfunction();' ...
并且这没有返回 false,则会重新加载页面,这会混淆您的视图。
相反,请尝试<a href='#' onclick='somejavafunction();return false;' ...
这会阻止href
被执行。
建议:与其创建base
和.htaccess
设置的混乱线,不如从清晰的目录结构和相对路径开始。在适当的环境中,您不需要其中任何一个。
你在问题中写道:
我得到了一个解决方案,使用
<base>
标签来定义所有 html 文件遵循的路径,
这听起来有点像这种"解决方案"实际上会给您的应用程序带来问题。听起来你收到的东西你无法完全处理它的影响。
我通常会考虑在 Web 应用程序不良实践的超文本输入/输出层的设计中使用 <base>
元素。所以无论谁建议你,要么不知道,要么故意这样做。它通常只能是具体文档上的补丁,如果您遇到分辨率问题,因为您无法保留文档 URI(例如,您正在镜像或存档超文本文档(。对于 Web 应用程序来说,这种情况通常不应该是这种情况,因为应用程序配置了基本 URI,因此可以在呈现 HTML 输出时将其用作属性。我所知道的所有过去使用 <base>
元素的应用程序都放弃了它的使用。
因此,我可以热情地给出的最佳答案是重新考虑在您的应用程序中使用 <base>
元素并将其删除。在第一种情况下,它会导致您的问题。