htaccess 和 css 文件
Posted
技术标签:
【中文标题】htaccess 和 css 文件【英文标题】:htaccess and css files 【发布时间】:2012-10-31 07:24:52 【问题描述】:我有这个项目:
在索引中,我使用以下代码检查 url:
if( isset( $_GET['url'] ) )
if( file_exists( 'classes/layout/'.$_GET['url'].'.php' ) )
require_once 'classes/layout/'.$_GET['url'].'.php';
在我的 .htacces 中:
RewriteEngine on
RewriteCond %REQUEST_FILENAME -f [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule .* - [L]
RewriteRule ^(.*?)$ index.php?url=$1&%QUERY_STRING [L]
这很好用。何时转到示例:127.0.0.1/test/pages/edit 索引包括 edit.php 但在索引中我使用了一个名为 test.css 的 css 文件,它使整个 html 背景变为红色。
如果我去 127.0.0.1/test/ 我看到整个背景都是红色的。但是当我去 127.0.0.1/test/pages/edit 它是白色的。我检查了 css 文件的 url,我得到了这个:
127.0.0.1/test/ = 127.0.0.1/test/cache/css/test.css
127.0.0.1/test/pages/edit = 127.0.0.1/test/pages/cache/css/test.css
有人知道如何解决这个问题吗?
【问题讨论】:
也许这会有所帮助:***.com/questions/13305963/… 快速旁注:您发布的代码示例会产生潜在的安全问题(路径遍历)。你永远不应该相信用户输入! 向我们展示这一行,您是如何将 test.css 包含在您的条目脚本中的。 详细说明 Martijn 的观点:如果您将该代码放在公开可用的 Web 服务器上,您将向全世界开放该服务器。您应该将 URL 参数的值与一组预定义的值进行比较,并根据该值加载正确的文件。为此,参数应该具有不同的名称,例如 pageId 或其他名称。然后执行:if($_GET['pageId'] == 'page1') require_once('path/to/file');
.
【参考方案1】:
您需要使 css 链接成为绝对链接(以 /test/
开头)或通过将其添加到页面标题来为所有相对链接添加基础:
<base href="/test/">
(基础 URI 可能需要调整,但看起来您希望它是 /test/
)
发生这种情况的原因是浏览器会根据加载的 URL 猜测 URI-base 是什么。当您在浏览器中输入http://127.0.0.1/test/
时,浏览器会假定URI 基数是/test/
,并且所有相关链接都会将其附加到前面。但是当您在浏览器中输入http://127.0.0.1/test/pages/edit
时,它会假定基数是/test/pages/
,因此您的相对链接会在前面附加错误的基数。
【讨论】:
是的,这是我的问题。现在修好了!谢谢 :)【参考方案2】:问题是你没有给 css 提供正确的路径。始终尝试从基本 url 调用样式/脚本,如下所示: 希望这会有所帮助。
<?php
if($_SERVER['REMOTE_ADDR'] == '127.0.0.1')
define("SITEROOT","http://localhost/test/"); // base to your web directory ie,www or htdocs
?>
//call style in this manner
<link href="<?php echo SITEROOT; ?>Sourcefiles/cache/css/test.css" rel="stylesheet" type="text/css" />
【讨论】:
以上是关于htaccess 和 css 文件的主要内容,如果未能解决你的问题,请参考以下文章
htaccess 重写条件将 css 和 js 文件更改为索引页面内容
.htaccess:使用 RewriteCond 但对 IMAGES/JS/CSS 文件的hrefs仍然被不必要地重写[重复]