【问题标题】:.htaccess masking directory with or without slash.htaccess 带有或不带斜杠的掩码目录
【发布时间】:2019-01-26 19:43:42
【问题描述】:

我正在尝试使用一些静态 html 内容来屏蔽目录,简单的示例如下所示: RewriteRule ^something/?$ sub_directory/something/

现在,当用户关注 ulr 之类的

www.example.com/something/

一切正常,静态页面从 sub_directory/something 加载,带有 css 和图像。但是当用户访问这样的 url 时:www.example.com/something(没有尾部斜杠),应用程序返回 404 错误。

我在这里做错了什么?

我试过了:

RewriteRule ^something(.*) sub_directory/something/$1

但是这样一来,只加载html内容,没有任何js、css或图片文件。

【问题讨论】:

  • 路径将是 sub_directory/something/csssub_directory/something/imagessub_directory/something/js 等。Js 和 Css 也有缩小文件。在html中,路径为images/image.jpg等。
  • 这些 CSS 是如何包含在您的 HTML 中的?你能分享一个例子吗?
  • 这将是一个来自 html 的 css 示例:<link rel="stylesheet" type="text/css" href="css/style.min.css?v1"> 和 js <script src="js/jquery-2.2.0.min.js"></script>

标签: .htaccess directory masking


【解决方案1】:

你的规则是这样的:

RewriteEngine On

RewriteRule ^(?:js|css|images)/.+$ sub_directory/something/$0 [L,NC]

RewriteRule ^something(?:/.*)?$ sub_directory/$0 [L,NC]

并将其添加到页面 HTML 的 <head> 部分下方:

<base href="/sub_directory/something/" />

这样每个相对 URL 都是从该基本 URL 而非当前页面的 URL 解析的。

【讨论】:

  • 这样我得到一个像 The requested URL /sub_directory/something/something/ 这样的 404 错误,无论有没有斜杠。
  • 像魅力一样工作 :) 这解决了我的问题,但我必须知道(我已经为此苦苦思考了一段时间),有没有办法在不更改 html 文件的情况下完成这项工作?
  • 我会得到www.domain.com/images/image.jpg,对于css和js文件也是如此。
  • 它有效,但这对我来说是个问题。碰巧我无法重写任何 css、img 或 js 文件。这是一个多站点应用程序,根目录下有图片、js和css目录,是其他东西需要的。但是,我确实将 base 标签的 href 值更改为 "/something/" 而不是 "/sub_directory/something/" 使用此重写规则 RewriteRule ^something(.*) sub_directory/something/$1 并且它适用于两种情况,无论是否带有斜杠。当我将?:/ 添加到组合中时,它只会将我重定向到example.com/sub_directory/something/。如果我知道原因,我会被诅咒的。
  • 无论如何&lt;base ...&gt; 是我在这种情况下向所有人推荐的首选解决方案。另请注意RewriteRule ^something(?:/.*)?$ sub_directory/$0 [L,NC] 几乎相同,但更安全,因为^something(.*) 也将匹配something123something-something
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2015-09-20
  • 1970-01-01
  • 2016-08-24
  • 2013-08-24
  • 2014-12-22
相关资源
最近更新 更多