我试图编写一个脚本,可以用slug方式重写网址:
http://www.mysite.com/mystorytitle/
我在我的代码中这样做了:
RewriteRule ^(.*)\/$ app=News&file=article&title=$1 [L]
在我的PHP代码中,我创建了一个故事标题的slu :::
$slug_title = mysql_real_escape_string($mtitle);
$show= "<a href=\"$slug_title/\">$mtitle</a>";
现在一切都很好,除非我点击slugged链接,它会进入页面,但没有任何风格和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" />
我猜,这被认为是一个文件夹而非重写路径
但我确定应该有另一种方法让这个脚本在不改变所有路径的情况下
提前致谢
答案 0 :(得分:2)
正如您已经写过的,这将会发生,因为浏览器认为您位于以slug命名的不同目录中。
您必须对CSS网址执行某些内容,或者相对../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">
答案 1 :(得分:1)
您应该预先添加基本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;
}
答案 2 :(得分:0)
只需在所有资源URI之前添加正斜杠......例如/static/image.png
。这将使浏览器从根目录(即www.site.com/path
)
答案 3 :(得分:0)
您也可以在头部使用基本标签,然后所有相关链接,样式表和图像都将从那里开始。我们通常这样做。它是根据请求URL和index.php的 FILE 路径在我们所有项目中自动设置的。
例如: