我在.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和图像就会丢失。
我在这里做错了什么?
答案 0 :(得分:2)
您需要从Web浏览器的角度考虑这一点。
如果URL没有以斜杠结尾,例如“/ about”,则Web浏览器会假定它正在Web服务器的顶级目录中查看名为“about”的文件。因此,由“/ about”生成的具有相对路径的页面中的任何请求都将导致Web浏览器基于在顶级目录中启动而生成完整路径。例如,CSS文件路径“css / style.css”将导致浏览器从顶层启动并从“/css/style.css”请求文件。
但是如果URL在我们的示例中以斜杠结尾处于“/ about /”,那么Web浏览器认为它正在查看名为“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文件等的所有可能结果。我不赞成这种方法,因为它通常会使你的规则集更加脆弱和复杂。