【问题标题】:htaccess different behaviour with trailing slash on the URLhtaccess 在 URL 上带有斜杠的不同行为
【发布时间】:2023-03-09 21:42:01
【问题描述】:

我在根文件夹下的 .htaccess 文件中有以下规则

RewriteEngine on

RewriteRule ^/?$ /testsite/index.php?rel=m
RewriteRule ^about/?$ /testsite/aboutus.php?rel=b
RewriteRule ^ict/?$ /testsite/ict.php?rel=b
RewriteRule ^eeap/?$ /testsite/eeap.php?rel=b

索引规则在有或没有斜杠的情况下都可以正常工作。但是,当我点击 http://mydomain.com/testsite/about/ 时,该页面在没有 CSS 和图像的情况下提供,并且如果最后一个斜杠被删除,则可以正常工作。 ict 的规则也会发生这种情况。

对于下一个规则(eeap),事情的表现是相反的。如果我用斜杠结束 URL,CSS 和图像就会丢失。

我在这里做错了什么?

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    您需要从网络浏览器的角度考虑这一点。

    如果 URL 不以斜杠结尾,例如“/about”,则 Web 浏览器假定它正在查看 Web 服务器顶级目录中名为“about”的文件。因此,由“/about”生成的页面中具有相对路径的任何请求都将导致 Web 浏览器基于从顶级目录开始生成完整路径。例如,“css/style.css”的 CSS 文件路径将导致浏览器从顶层开始并从“/css/style.css”请求文件。

    但如果 URL 确实以斜杠结尾,在我们的示例中为“/about/”,则网络浏览器认为它正在查看名为“about”的子目录。现在,相同的 CSS 文件路径“css/style.css”将导致 Web 浏览器从“/about/css/style.css”请求文件。

    一个 CSS 文件路径是正确的,另一个则不是。因此,您看到的行为。

    有几种方法可以避免这种情况。您可以告诉 Apache 将所有请求永久重定向到以斜杠结尾的 URL 或不以斜杠结尾的 URL,这样所有访问者最终都会看到相同的 URL。这样就可以知道在您的网页中使用哪些相对 CSS 和图像路径。

    或者您可以修改您的网页,以便 CSS、图像、JavaScript 等的所有文件路径都锚定到顶级目录。例如,“css/style.css”会变成“/css/style.css”(注意路径开头的正斜杠告诉浏览器从顶级目录开始)。

    或者您可以添加一堆复杂的 mod_rewrite 规则来尝试捕获 CSS 文件等的所有可能结果。我不赞成这种方法,因为它通常会使您的规则集更加脆弱和复杂。

    【讨论】:

    • 你太棒了!谢谢。
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    相关资源
    最近更新 更多