【问题标题】:mod_rewrite Clean URL rewritingmod_rewrite 清除 URL 重写
【发布时间】:2020-05-01 23:03:30
【问题描述】:

我正在尝试为我的网站编写干净的 url。我是这方面的菜鸟,所以请原谅我。我的 .htaccess 文件目前看起来像这样:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9-]+)$ something.php?query=$1
RewriteRule ^([a-zA-Z0-9-]+)/$ something.php?query=$1

第一条规则似乎有效。例如 website.com/good-looking-query-string 实际上会重写为 website.com/something.php?query=ugly+looking+query+string

第二条规则是我遇到问题的地方。我无法让那个斜杠起作用。例如website.com/good-looking-query-string/ 似乎拉起页面,但没有应用任何 CSS 规则。我注意到所有链接最终都附加到查询字符串中。例如,返回 index.php 的链接最终会像 website.com/good-looking-query-string/index.php

我需要让那个斜杠起作用。我到底做错了什么?

【问题讨论】:

    标签: php regex apache mod-rewrite clean-urls


    【解决方案1】:

    您可以将两行合并为一行:

    RewriteEngine On
    RewriteRule ^([a-zA-Z0-9-]+)/?$ something.php?query=$1
    

    在这种情况下,/ 将是可选的

    【讨论】:

    • 这只会将斜杠放在query 参数中。这是客户端问题。
    • 你没有错也没有错,原因是他把CSS的文件有相对地址,所以src="style.css"需要从当前文件夹中获取文件,但由于他不是给出正确的地址(重写工作不正常)当前页面地址更改为(/good-looking-query-string/)。所以你的评论对于解决css的问题是正确的,这将解决相对寻址,但他的问题也是我试图解释的重写规则
    • 该页面仍将处于子目录级别,但所有具有相对路径的请求仍然会太高。看最后一部分website.com/good-looking-query-string/index.php应该是website.com/index.php
    • something.php不是在主层吗?或者我理解错了。 (我也更新了答案
    • 知道了!这是一个相对路径的事情。我刚刚在我的标题中添加了<base href="website.com">,一切都很好。谢谢大家!
    【解决方案2】:

    您的问题是客户端,您使用的是相对路径,但您需要使用 Root-relative 路径。网址:

    website.com/good-looking-query-string
    

    从根目录加载。一个网址:

    website.com/good-looking-query-string/
    

    good-looking-query-string 目录加载。

    因此,您应该使用 "href="/style.css"and the index issue should behref="/index.php"instead ofhref="index.php"` 而不是 href="style.css"

    如前面的评论中所述,您的正则表达式可以通过在尾部斜杠上添加 ? 来简化,以使其成为选项。不过这不是你的问题,只是简化了规则。

    RewriteRule ^([a-zA-Z0-9-]+)/?$ something.php?query=$1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2013-11-23
      相关资源
      最近更新 更多