我原来的网址是/localhost/site/en/detail.php?id=1&title=Hello%20World 我会一个干净的网址:/ localhost / site / en / posts / 1 / Hello-World但问题是找不到该对象
来自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 :(得分:0)
&#34;找不到对象&#34;听起来像处理请求的PHP代码中的错误。您正在将title参数中的空格替换为连字符,因此如果您未在请求处理程序中对此进行说明,则可能会看到破损。
如果您的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);