我试图编写一个脚本,它可以像这样以段式方式重写urls:
http://www.mysite.com/mystorytitle/
我在我的密码里这么做:
RewriteRule ^(.*)\/$ app=News&file=article&title=$1 [L]
在我的php代码中,我从故事的标题中创建了一个片段,如下所示:
$slug_title = mysql_real_escape_string($mtitle);
$show= "<a href=\"$slug_title/\">$mtitle</a>";
现在一切都很好,除非当我点击段式链接时,它会转到页面,但没有任何样式、javascripts和图像。
我确信问题是因为css文件的路径和.它被更改为一个级别
当我走在这条路上:http://www.mysite.com/ایمیل/
因此,如果需要css文件的页面如下:
<link rel="StyleSheet" href="includes/NAV.css" type="text/css" />
有一个级别改变了,要做到这一点,我应该回到一个级别,因为:
<link rel="StyleSheet" href="../includes/NAV.css" type="text/css" />
我想,这是一个文件夹,而不是重新编写的路径。
但是我确信应该有另一种方法使这个脚本在不改变所有路径的情况下运行()。
提前感谢
发布于 2010-02-26 10:13:22
您应该在基本URL (大部分时间为正斜杠,但不是总是)前面。
您可以按以下方式获得它(即使您的站点驻留在目录中,也可以使用通用表达式):
$baseUrl = rtrim((string)dirname($_SERVER['SCRIPT_NAME']), '/\\') . '/';
然后你会写:
<link rel="StyleSheet" href="<?php echo $baseUrl ?>includes/NAV.css" type="text/css" />
另一种可能是在head中使用基本标记:
<base href="<?php echo $baseUrl ?>" />
这样做的优点是只更改代码中的一行。
您可以走得更远,并制定实用方法来完成以下操作:
function baseUrl($url = '', array $query = null, $fragment = null)
{
static $baseUrl = rtrim((string)dirname($_SERVER['SCRIPT_NAME']), '/\\') . '/';
if ($query !== null) {
$url .= '?' . http_build_query($query);
}
if ($fragment !== null) {
$url .= '#' . (string)$fragment;
}
$url = $baseUrl . $url;
$url = trim(str_replace('\\', '/', (string)$url));
return $url;
}
发布于 2010-02-26 10:12:03
正如您已经写过的,这将发生,因为浏览器认为您位于一个以您的代码片段命名的不同目录中。
您必须对CSS URL做一些事情,或者像您已经做的那样引用它们相对../includes/
,或者使用绝对引用/includes/NAV.css
(域部分是可选的)。
如果这是一个PHP项目,我将创建一个包含web根目录的中央设置文件:
define("SITE_WEBROOT", "http://www.domain.com");
并引用与该设置相关的所有资源:
<link rel="stylesheet" type="text/css"
href="<?php echo SITE_WEBROOT; ?>/includes/NAV.css">
发布于 2010-02-26 10:15:16
只需在所有资源URI之前添加一个正斜杠。就像/static/image.png
。这将使浏览器从根请求它(即。www.site.com/path
)
https://stackoverflow.com/questions/2340781
复制相似问题