重写我的htaccess后,Php PDO和Get方法无法在干净的URL中工作

时间:2016-06-05 20:04:04

标签: php css .htaccess

请问我的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>

以下是页面加载的方式

enter image description here

1 个答案:

答案 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文件加载图像,则必须使图像的路径绝对。