mod_rewrite 清理 URL 重写

mod_rewrite Clean URL rewriting

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

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

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

第二条规则是我遇到问题的地方。我无法使尾部斜线起作用。例如 website.com/good-looking-query-string/ 似乎拉起页面但没有应用任何 CSS 规则。我注意到所有 links 最终也附加到查询字符串中。例如 link 回到 index.php 最终像 website.com/good-looking-query-string/index.php

我需要让尾部的斜线工作。我到底做错了什么?

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

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

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

您的问题出在客户端,您使用的是相对路径,但您需要使用 Root-relative 路径。 URL 个:

website.com/good-looking-query-string

从根加载。 url 个:

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

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

所以你应该 "href="/style.css"and the index issue should behref="/index.php"instead ofhref= 而不是 href="style.css" "index.php"`.

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

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