如何在php中生成slug
我正在尝试编写一个脚本,可以用slug方式重写URL,如下所示: 我在我的代码中做到了这一点:如何在php中生成slug,php,mod-rewrite,rewrite,Php,Mod Rewrite,Rewrite,我正在尝试编写一个脚本,可以用slug方式重写URL,如下所示: 我在我的代码中做到了这一点: RewriteRule ^(.*)\/$ app=News&file=article&title=$1 [L] 在我的php代码中,我用故事的标题创建了一个slug,如下所示: $slug_title = mysql_real_escape_string($mtitle); $show= "<a href=\"$slug_title/\">$mtitle<
RewriteRule ^(.*)\/$ app=News&file=article&title=$1 [L]
在我的php代码中,我用故事的标题创建了一个slug,如下所示:
$slug_title = mysql_real_escape_string($mtitle);
$show= "<a href=\"$slug_title/\">$mtitle</a>";
$slug\u title=mysql\u real\u escape\u字符串($mtitle);
$show=“”;
现在一切都很好,除非当我点击sluged链接时,它会进入页面,但没有任何样式和Java脚本和图像
我确信问题是因为css文件的路径和。。。哪一个级别已更改为一个级别
因为我在这条路上:
因此,如果页面需要如下css文件:
<link rel="StyleSheet" href="includes/NAV.css" type="text/css" />
更改了一个级别,为了实现这一点,我应该返回一个级别:
<link rel="StyleSheet" href="../includes/NAV.css" type="text/css" />
我猜,这是一个文件夹,而不是一个重写的路径
但是我确信应该有另一种方法使这个脚本在不改变所有路径的情况下工作
提前感谢正如您所写的,这将发生,因为浏览器认为您位于以slug命名的不同目录中 您必须对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">
正如您所写的,这将发生,因为浏览器认为您位于以slug命名的不同目录中
您必须对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">
您应该在基本URL前面加上前缀(大多数情况下是正斜杠,但并不总是这样)
您可以按如下方式获得它(即使您的站点位于目录中也可以使用的通用表达式):
然后你会写:
<link rel="StyleSheet" href="<?php echo $baseUrl ?>includes/NAV.css" type="text/css" />
您应该在基本URL前面加上前缀(大多数情况下是正斜杠,但并不总是这样)
您可以按如下方式获得它(即使您的站点位于目录中也可以使用的通用表达式):
然后你会写:
<link rel="StyleSheet" href="<?php echo $baseUrl ?>includes/NAV.css" type="text/css" />
只需在所有资源URI之前添加一个正斜杠。。。比如/static/image.png
。这将使浏览器从根目录请求它(即www.site.com/path
)只需在所有资源URI之前添加一个正斜杠。。。比如/static/image.png
。这将使浏览器从根目录请求它(即www.site.com/path
)您也可以在head部分使用base标记,然后所有相关链接、样式表和图像将从那里开始。我们通常这样做。它是根据index.php的请求URL和文件路径在我们的所有项目中自动设置的
例如:
您也可以在head部分使用base标记,然后所有相关链接、样式表和图像都将从此处开始。我们通常这样做。它是根据index.php的请求URL和文件路径在我们的所有项目中自动设置的 例如:
我就是这么做的,我只是简短地提到了
:t谢谢,我所有的尝试都不是要改变那么多,如果我想遵循你的想法,我应该改变20多个资源(css、js,…)链接,我应该为使用我的CMS的客户做同样的事情,我正在寻找一个能够区分slug路径和文件夹路径的解决方案,你知道我在说什么吗@麦克·泰勒:我明白你的意思,但这真的不能做得很好。是浏览器认为它位于不同的目录中。你可以建立一个重写规则,将/slugname/includes/NAV.css
的所有请求重定向到/includes/NAV.css
,但那是胡说八道。我认为引入web根目录设置是唯一的方法,尤其是如果您有一个CMS,您可以将其发送给客户。实际上,我在我的CMS中设置了web根目录路径,我可以使用它,但正如我所说,仍然需要做很多更改。您可以在标题中使用基本标记(可能包括在CMS中)。它在任何情况下都会起作用。看看我的答案。这就是我所做的,我只是简短地提到了
:Dthanks,我所有的尝试都不是要改变那么多,如果我想遵循你的想法,我应该改变20多个资源(css、js,…)链接,我应该为使用我的CMS的客户做同样的事情,我正在寻找一个解决方案,可以区分slug路径和文件夹路径,你知道我在说什么吗@麦克·泰勒:我明白你的意思,但这真的不能做得很好。是浏览器认为它位于不同的目录中。你可以建立一个重写规则,将/slugname/includes/NAV.css
的所有请求重定向到/includes/NAV.css
,但那是胡说八道。我认为引入web根目录设置是唯一的方法,尤其是如果您有一个CMS,您可以将其发送给客户。实际上,我在我的CMS中设置了web根目录路径,我可以使用它,但正如我所说,仍然需要做很多更改。您可以在标题中使用基本标记(可能包括在CMS中)。它在任何情况下都会起作用。看看我的答案。顺便说一句,mysql\u real\u escape\u string
是将文本放入HTML的错误转义。它仅用于MySQL查询,不会保护您免受HTML注入(XSS)的影响。对于$mtitle
,您应该使用htmlspecialchars
。理想情况下,您还应该为$slugtitle
使用urlencode
,这样它就可以作为一个普通的旧URI和一个IRI工作。在什么基础上告诉您urlencode远比mysql\u real\u escape\u string好,顺便说一句,当使用urlencode时,它会在标题中添加“+”,mysql\u real\u escape\u string