当我在.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。
1条答案
按热度按时间gorkyyrv1#
这个规则的 * 问题 * 是它重写任何只包含单词“About”的URL。因此,
/About/SomeText
、/AnythingAbout
和/AbcAboutXyz
都被重写为处理请求的About.php
。(它也重写自己,这是另一回事!)您需要具体指定,并且仅精确匹配
/About
的请求。例如: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时,您需要使用:
head
部分中指定一个base
元素,该元素告诉浏览器应该使用哪个URL作为所有相对URL的 base。尽管这种方法有一些警告(如下面的链接问题所述)(尽管如此,在限制上述规则仅匹配
/About
时,这自然避免了这个问题。)另请参见my answer,了解有关此问题的更多详细信息: