Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.htaccess将post.php?post_id=20重写为/post/这是标题/_Php_.htaccess_Mod Rewrite_Redirect_Url Rewriting - Fatal编程技术网

使用.htaccess将post.php?post_id=20重写为/post/这是标题/

使用.htaccess将post.php?post_id=20重写为/post/这是标题/,php,.htaccess,mod-rewrite,redirect,url-rewriting,Php,.htaccess,Mod Rewrite,Redirect,Url Rewriting,我是.htacces的新手,多年来我一直试图从以下网站获取我的域名: www.domain.com/post.php?post_id=20 对这样的事情: www.domain.com/post/this-is-the-title/ 正如我所说,我是新来的。但任何东西都会有帮助,请! 注意:我会从SQL数据库中获取我博客文章的标题,但你不能。您必须将标题放在查询字符串上。 .htaccess无法安全地从数据库中获取任何内容。 既然你要重写url,为什么不直接在URI中写文章标题呢?你不能。您

我是.htacces的新手,多年来我一直试图从以下网站获取我的域名:

www.domain.com/post.php?post_id=20
对这样的事情:

www.domain.com/post/this-is-the-title/
正如我所说,我是新来的。但任何东西都会有帮助,请!
注意:我会从SQL数据库中获取我博客文章的标题,但你不能。您必须将标题放在查询字符串上。 .htaccess无法安全地从数据库中获取任何内容。
既然你要重写url,为什么不直接在URI中写文章标题呢?

你不能。您必须将标题放在查询字符串上。 .htaccess无法安全地从数据库中获取任何内容。
既然您要重写url,为什么不在URI中简单地写文章标题?

如果页面标题是数据库驱动的(或者是动态的),我看不出您怎么能逃脱.htaccess重写。在PHP脚本中使用路由将更有意义

我写过一个非常简单的路由方法。这是为人们只进入主题,但你应该能够建立一个数据库驱动路由器的基础上

基本上,通过index.php路由所有流量,然后在那里获取请求URI并决定加载哪些资源

[编辑]

让我用我的博客文章中的信息详细说明一下

假设您已经设置并运行了站点,首先将流量定向到index.php。您可以在.htaccess中执行此操作,操作方式如下:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
$pdo = new PDO(/* your db connection params */);
$page = $pdo
    ->query("SELECT * FROM pages WHERE alias = :alias",
    array("alias" => $uri)
    )
    ->fetch();
然后,在index.php中(或在从index.php调用的脚本中),您可以获得请求URI:

$uri = $_SERVER["REQUEST_URI"];
好的,到目前为止还不错。现在让我们假设您的数据库包含页面内容和页面别名。uri很可能是页面别名,因此您只需执行以下操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
$pdo = new PDO(/* your db connection params */);
$page = $pdo
    ->query("SELECT * FROM pages WHERE alias = :alias",
    array("alias" => $uri)
    )
    ->fetch();
此时,您应该在URI字符串中具有与标题(或别名)对应的页面内容。您现在需要做的就是以任何方式显示它:

echo $page["content"];

如果页面标题是数据库驱动的(或者是动态的),我看不出你怎么能不重写.htaccess。在PHP脚本中使用路由将更有意义

我写过一个非常简单的路由方法。这是为人们只进入主题,但你应该能够建立一个数据库驱动路由器的基础上

基本上,通过index.php路由所有流量,然后在那里获取请求URI并决定加载哪些资源

[编辑]

让我用我的博客文章中的信息详细说明一下

假设您已经设置并运行了站点,首先将流量定向到index.php。您可以在.htaccess中执行此操作,操作方式如下:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
$pdo = new PDO(/* your db connection params */);
$page = $pdo
    ->query("SELECT * FROM pages WHERE alias = :alias",
    array("alias" => $uri)
    )
    ->fetch();
然后,在index.php中(或在从index.php调用的脚本中),您可以获得请求URI:

$uri = $_SERVER["REQUEST_URI"];
好的,到目前为止还不错。现在让我们假设您的数据库包含页面内容和页面别名。uri很可能是页面别名,因此您只需执行以下操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
$pdo = new PDO(/* your db connection params */);
$page = $pdo
    ->query("SELECT * FROM pages WHERE alias = :alias",
    array("alias" => $uri)
    )
    ->fetch();
此时,您应该在URI字符串中具有与标题(或别名)对应的页面内容。您现在需要做的就是以任何方式显示它:

echo $page["content"];

使用.htaccess无法做到这一点,因为您需要“以某种方式从SQL数据库获取博客文章的标题”,使用PHP执行重定向:

您不能使用.htaccess来执行此操作,因为您需要“以某种方式从SQL数据库获取您的博客文章的标题”,请使用PHP重定向。:)

我知道这很旧,但我刚刚有时间尝试一下,在index.php中,我应该把“$uri=$\u SERVER[“REQUEST\u uri”];”放在哪里?无论我放在哪里,它都是文本而不是代码为了让您的代码被评估为PHP,它必须在PHP标记中:
我知道这是旧的,但我刚刚有时间尝试它,我应该在index.PHP中的哪里放“$uri=$\u SERVER[“REQUEST\u uri”]?”?无论我放在哪里,它都是文本而不是代码为了让您的代码被评估为PHP,它必须在PHP标记中: