2016-08-13 100 views
0

我的原始网址是/localhost/site/en/detail.php?id=1 & title = Hello%20World 我想要一个干净的网址:/ localhost/site/EN /职位/ 1 /您好,世界,但问题是,对象未找到,重写URL:找不到对象(.htaccess)

从HTML请求

<a href="post/'.$rij['id'].'/'.$rij['title'].'"><div class="material"><i class="fa fa-1x fa-chevron-right"></i></div></a> 

php文件和PHP处理程序:

$titlestring = mysqli_real_escape_string($db, $_GET['title']); 
$idstring = mysqli_real_escape_string($db, $_GET['id']); 

$query = "SELECT * FROM posts WHERE id=".$idstring; 

我将做BIND后来变量

这是我htaccessfile

RewriteEngine on 
RewriteBase/
#external redirect from actual URL to pretty one (remove query string) 
RewriteCond %{THE_REQUEST} \s/+detail\.php\?id=$1&?title=([^\s&]+) 
RewriteRule^%1? [R=302,L,NE] 
# convert all space (%20) to hyphen 
RewriteRule "^(\S*) +(\S* .*)$" $1-$2 [N,NE] 
RewriteRule "^(\S*) (\S*)$" $1-$2 [L,R=302,NE] 
# rewrite rule to call actual PHP handler 
RewriteRule ^post/([0-9]+)/([-a-zA-Z_-]+) detail.php?id=$1&title=$2 [L,QSA,NC] 

回答

0

“对象未找到,”听起来像是从正在处理该请求你的PHP代码中的错误。您将标题参数中的空格替换为连字符,因此如果您在请求处理程序中未对此进行说明,则可能会看到破损。

如果您的id是唯一的(预计他们应该是),那么您可能会删除任何引用残缺的title的代码。否则,您需要确保将标题转换回旧结构以使用它。

没有处理请求的代码示例,我无法提供要更改的准确示例。但是,让我们假设你正在做的事情一样

$stmt = $mysqli->prepare("SELECT * FROM posts WHERE id=? and title=?"); 
$stmt->bind_param('is', $_GET['id'], $_GET['title']); 

你应该把它改为只

$stmt = $mysqli->prepare("SELECT * FROM posts WHERE id=?"); 
$stmt->bind_param('i', $_GET['id']); 

或类似的东西:

$stmt = $mysqli->prepare("SELECT * FROM posts WHERE id=? and title=?"); 
$title = str_replace('-', ' ', $_GET['title']); 
$stmt->bind_param('is', $_GET['id'], $title); 
+0

我不认为这是一个问题。我更新了我的代码,并且我没有在查询中真正使用该标题, –