请问我的PHP PDO,MOD-REWRITE和GET METHOD有问题。 我重写我的网站使用干净的网址,并使用php pdo阅读发布的文章旧链接看起来像这样
http://example.com/questions.php?postid=145
在重写之后看起来像这样
http://example.com/questions/postid/145
但我的问题是,当我尝试使用干净的网址阅读文章时,它将无法正常加载或显示The page isn't redirecting properly
,但大多数情况下它将加载而不会显示css,而正常链接显示页面时所有图片都不会显示因为它假设所有图像和css完好无损。请问我不知道是什么原因或如何解决它,有人可以帮助我吗?
请参阅我的.htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} ^[A-Z]{3,}\s/+questions\.php\?postid=([^\s&]+) [NC]
RewriteRule ^ questions/postid/%1? [R=301,L]
RewriteRule ^questions/postid/([^/]+)/?$ questions.php?postid=$1&$2& [L,QSA]
这是我的PHP PDO
<?php
session_start();
include('dbconn.php');
if(isset($_GET['postid'])){
$db_conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD);
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$FINDID = $_GET['postid'];
try{
$find_stmt = $db_conn->prepare("SELECT * FROM blogs b
INNER JOIN users u
ON b.UserName = u.username
WHERE b.IDS =:postid AND action = 'active'");
$find_stmt->bindParam(':postid', $FINDID);
$find_stmt->execute();
$FoundResault = $find_stmt->fetch(PDO::FETCH_OBJ);
if ($FoundResault) {
$IDS = $FoundResault->IDS;
$blog_title = $FoundResault->blog_title;
$blog_body = $FoundResault->blog_body;
$comments = $FoundResault->comments;
}
$checkreply = $replies;
}catch(PDOException $e){ echo "Error:" . $e->getMessage();}
$db_conn = null;
}
else{
//echo "<meta http-equiv=\"refresh\" content=\"0;URL=".slash."index.php\">";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<?php
echo $blog_body."<br/>";
echo $blog_body."<br/>";
echo $comments."<br/>";
?>
</body>
</html>
以下是页面加载的方式
答案 0 :(得分:1)
您的问题与PDO或PHP无关。 您的问题与HTML文档中的相对URL以及CSS / JavaScript文件等资源的工作方式有关。
让我们假设URL http://example.com/question.php?postid=1234提供以下输出:
<html>
<head>
<style rel="style.css">
</head>
<body>
Question 1234: Text here
</body>
</html>
您的浏览器现在计算style.css的URL,该URL相对于question.php文件的目录,使其指向http://example.com/style.css。
如果您现在将页面URL重写为http://example.com/questions/1234,浏览器会计算css文件的URL相对于http://example.com/questions,因为它认为这是页面1234的目录, css文件的URL现在是http://example.com/question/style.css。
最简单的解决方案是在同一目录中重写:重写question.php?postid = 1234到问题1234:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^question-([0-9]+)$ /question.php?postid=$1 [L,QSA]
第二个最佳解决方案是将所有CSS和JavaScript文件路径设置为绝对路径(以/开头),以便您的浏览器始终知道它们位于哪个目录中。如果从CSS文件加载图像,则必须使图像的路径绝对。