apache 使用.htaccess重写规则将about.php重定向到domain.com/About/

zpjtge22  于 2023-01-14  发布在  Apache
关注(0)|答案(1)|浏览(119)

当我在.htaccess中写入RewriteRule About About.php [L,QSA]以使用户使用以下链接example.com/About/访问example.com/About.php时。如果仅将其写入为example.com/About,则用户可以正确访问它。如果我添加更多像example.com/About/这样的backslack,则CSS文件不会加载。此外,如果任何人访问此链接example.com/About/SomeText,他不会得到错误404,他会得到about.php页面,而不会加载CSS。

gorkyyrv

gorkyyrv1#

RewriteRule About About.php [L,QSA]

这个规则的 * 问题 * 是它重写任何只包含单词“About”的URL。因此,/About/SomeText/AnythingAbout/AbcAboutXyz都被重写为处理请求的About.php。(它也重写自己,这是另一回事!)
您需要具体指定,并且仅精确匹配/About的请求。例如:

RewriteRule ^About$ About.php [L]

RewriteRule指令的第一个参数是一个正则表达式,它匹配请求的URL路径(减去斜杠前缀)。
此处不需要QSA标志。
如果我添加更多的backslack,如domain.com/About/,则不会加载CSS文件。
“backslack”-是一个(正)“斜杠”(也不是“反斜杠”)。
如果使用相对URL路径访问CSS文件,则会发生这种情况(以及其他静态资源,如图像和JS)。相对URL路径由 * 浏览器 * 相对于当前URL解析。例如,如果您使用href="styles.css"链接到样式表,而浏览器中的当前URL为/About/SomeText,则浏览器将自然请求/About/styles.css,而不是您所期望的/styles.css(当URL只是/About时)。
在不同的路径深度重写URL时,您需要使用:

  • 根相对(以斜杠开头)URL路径。
  • 绝对URL(使用方案+主机名)。
  • 在HTML源代码的head部分中指定一个base元素,该元素告诉浏览器应该使用哪个URL作为所有相对URL的 base。尽管这种方法有一些警告(如下面的链接问题所述)

(尽管如此,在限制上述规则仅匹配/About时,这自然避免了这个问题。)
另请参见my answer,了解有关此问题的更多详细信息:

相关问题