Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Php 如何在.htaccess中使用?_Php - Fatal编程技术网

Php 如何在.htaccess中使用?

Php 如何在.htaccess中使用?,php,Php,我想更改此地址: www.domain.com/game.php?id=1 对这样的事情: www.domain.com/game/1/THE-NAME-OF-THE-GAME-IN-DB 我怎么做 还有一个问题: 我希望当用户转到不存在的地址时,例如,如果它不存在: www.domain.com/game.php?id=9123912 - this ID doesnt exists 服务器会将其传递到404错误。我怎么做 多谢各位 编辑: game.php: if (isset($_GE

我想更改此地址:

www.domain.com/game.php?id=1
对这样的事情:

www.domain.com/game/1/THE-NAME-OF-THE-GAME-IN-DB
我怎么做

还有一个问题:

我希望当用户转到不存在的地址时,例如,如果它不存在:

www.domain.com/game.php?id=9123912 - this ID doesnt exists
服务器会将其传递到404错误。我怎么做

多谢各位

编辑:

game.php:

if (isset($_GET['id'])) {

    $row = mysql_num_rows(mysql_query("SELECT * FROM games WHERE id = '{$_GET['id']}'"));

    if ($row) {
        $game = mysql_fetch_array(mysql_query("SELECT * FROM games WHERE id = '{$_GET['id']}'"));
        Header( "HTTP/1.1 301 Moved Permanently" ); 
        Header( "Location: /game/".$game['id']."/".seo_title($game['name'])); 
    } 

    else {
        Header( "HTTP/1.1 404 Not found" ); 
    }

    exit;
}
htaccess:

LIKE YOU SAID. I JUST COPIED.

.htaccess并不像您提到的那样执行url重写。如果您的服务器正在运行apache,请尝试。如果您的服务器正在运行IIS,请尝试


至于第二个问题,如果id不存在,让game.php重定向到您知道不存在的页面名(如9123912.html)。服务器应配置为以本机方式交付404。

。htaccess并不像您提到的那样执行url重写。如果您的服务器正在运行apache,请尝试。如果您的服务器正在运行IIS,请尝试

至于第二个问题,如果id不存在,让game.php重定向到您知道不存在的页面名(如9123912.html)。服务器应配置为以本机方式交付404。

.htaccess

RewriteEngine On
RewriteRule ^game/([0-9]+)/ /game.php?newid=$1
game.php

if (isset($_GET['id'])) {
  $row = dbgetrow("SELECT * FROM games WHERE id = %s",$_GET['id']);
  if ($row) {
    Header( "HTTP/1.1 301 Moved Permanently" ); 
    Header( "Location: /game/".$row['id']."/".seo_title($row['name'])); 
  } else {
    Header( "HTTP/1.1 404 Not found" ); 
  }
  exit;
}

if (isset($_GET['newid'])) $_GET['id'] = $_GET['newid'];
这是一个代码,对我来说很有用,但被认为是一个伪代码,可以给你一个想法。
函数从数据库中获取一行
seo_title()函数可以是这样的

function seo_title($s) {
    $s = strtolower(trim($s));
    $s = str_replace(" ","-",$s);
    $s = preg_replace('![^a-z0-9-]!',"",$s);
    $s = preg_replace('!\-+!',"-",$s);
    return $s;
}
整个概念已从以下方面缩减:)
唯一的
games/1/
部分非常重要,而其余部分可以是任何内容,游戏标题只是为了seo目的。以这个问题的标题为例:

:)

.htaccess

RewriteEngine On
RewriteRule ^game/([0-9]+)/ /game.php?newid=$1
game.php

if (isset($_GET['id'])) {
  $row = dbgetrow("SELECT * FROM games WHERE id = %s",$_GET['id']);
  if ($row) {
    Header( "HTTP/1.1 301 Moved Permanently" ); 
    Header( "Location: /game/".$row['id']."/".seo_title($row['name'])); 
  } else {
    Header( "HTTP/1.1 404 Not found" ); 
  }
  exit;
}

if (isset($_GET['newid'])) $_GET['id'] = $_GET['newid'];
这是一个代码,对我来说很有用,但被认为是一个伪代码,可以给你一个想法。
函数从数据库中获取一行
seo_title()函数可以是这样的

function seo_title($s) {
    $s = strtolower(trim($s));
    $s = str_replace(" ","-",$s);
    $s = preg_replace('![^a-z0-9-]!',"",$s);
    $s = preg_replace('!\-+!',"-",$s);
    return $s;
}
整个概念已从以下方面缩减:)
唯一的
games/1/
部分非常重要,而其余部分可以是任何内容,游戏标题只是为了seo目的。以这个问题的标题为例:


:)

也许最好的方法是将页面重定向到正确的url,如下面的代码:(为我工作)

在.htaccess文件中,您还可以将
RewriteBase
设置为
RewriteBase/
RewriteBase/YOUR\u SCRIPT\u PATH\u而不使用\u HOST\u NAME/


另请参见

也许最好的方法是将页面重定向到正确的url,如下面的代码:(为我工作)

在.htaccess文件中,您还可以将
RewriteBase
设置为
RewriteBase/
RewriteBase/YOUR\u SCRIPT\u PATH\u而不使用\u HOST\u NAME/



另请参见

我非常确定他想要的正是URL重写常用的功能-他只是倒着说。我非常确定他想要的正是URL重写常用的功能-他只是倒着说。嘿,首先-谢谢!它把我转到了-www.domain.com/game//-为什么?这个$newid是什么?谢谢。@Luis这是一个代码,对我来说很有用,但被认为是一个伪代码,可以给你一个想法。用数据库查找替换
dbgetrow()
函数,用自己的字段名替换实际变量$newid不让新的seo链接与旧的链接混淆。一旦脚本获得$\u GET['newid'],这意味着将使用新链接调用它。一旦使用$_GET['id']-它被旧的game.php?id=1链接调用,应该用正确的新地址重写,
/game/1/THE-NAME-OF-THE-game-IN-DB
one。要做到这一点,您必须用来自DBA的数据和可能的seo_totle()函数内容填充地址模板。我最近发布了我更改了函数的内容。。当然我正在使用PHP。$row的那部分起作用了。。seo_title()的一部分,它是哪个函数?嗯。。再一次,请将我转到:www.domain.com/game//我正在编辑问题,并向您展示我是如何做到的。嘿,首先-谢谢!它把我转到了-www.domain.com/game//-为什么?这个$newid是什么?谢谢。@Luis这是一个代码,对我来说很有用,但被认为是一个伪代码,可以给你一个想法。用数据库查找替换
dbgetrow()
函数,用自己的字段名替换实际变量$newid不让新的seo链接与旧的链接混淆。一旦脚本获得$\u GET['newid'],这意味着将使用新链接调用它。一旦使用$_GET['id']-它被旧的game.php?id=1链接调用,应该用正确的新地址重写,
/game/1/THE-NAME-OF-THE-game-IN-DB
one。要做到这一点,您必须用来自DBA的数据和可能的seo_totle()函数内容填充地址模板。我最近发布了我更改了函数的内容。。当然我正在使用PHP。$row的那部分起作用了。。seo_title()的一部分,它是哪个函数?嗯。。同样,请将我转到:www.domain.com/game//我正在编辑问题,并向您展示我是如何做到的。您的表中是否有
id
name
列?它们不是
game\u title
之类的吗?请注意,您应该至少使用
$\u GET['id']=intval($\u GET['id'])对$\u GET['id']进行清理您不需要另一个SQL调用。为什么不获取数组而不仅仅是num行?不,您的猜测是成功的:-)如果seo_标题是希伯来语,这并不重要。。我说得对吗?因为不管怎样它都不会写id。。你的2+3条评论-我觉得这并不重要$无论如何,游戏必须有效。它对任何语言都很重要。如果它与拉丁语不同,您必须为您的语言搜索translit函数并将其添加到seo_title()函数表中是否有
id
name
列?它们不是
game\u title
之类的吗?请注意,您应该至少使用
$\u GET['id']=intval($\u GET['id'])对$\u GET['id']进行清理您不需要另一个SQL调用。为什么不获取数组而不仅仅是num行?不,您的猜测是成功的:-)如果seo_标题是希伯来语,这并不重要。。我说得对吗?因为不管怎样它都不会写id。。你的#2+#3评论-我觉得这并不重要