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评论-我觉得这并不重要