如何在php中生成slu ..

时间:2010-02-26 10:08:16

标签: php mod-rewrite rewrite

我试图编写一个脚本,可以用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" />

我猜,这被认为是一个文件夹而非重写路径

但我确定应该有另一种方法让这个脚本在不改变所有路径的情况下

提前致谢

4 个答案:

答案 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 路径在我们所有项目中自动设置的。

例如: