如何解决htaccess url问题

时间:2015-08-20 09:13:49

标签: php .htaccess mod-rewrite

我是stackoverflow的新成员和php的初学者。我开始了一个示例博客项目。它工作正常,但我想改变网址为seo友好。有人能帮帮我吗?如何为这个博客编写htaccess代码。

的index.php

<?php
include_once("db.php");
$sql = mysql_query("SELECT * FROM post");
?>
<html>
<head>
<title>
Post
</title>
</head>

<body>
<h1>Post List</h1>
<ul>
<?php 
while($row = mysql_fetch_array($sql)){
?>
<li><a href="post.php?pid=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a></li>
<?php }?>
</ul>
</body>
</html>

post.php中

<?php
include("db.php");
if(isset($_GET['pid'])){
    $id = $_GET['pid'];
    $qry = mysql_query("SELECT * FROM post WHERE id=".$id); 
}
if($qry === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

?>
<html>
<head>
<title>
View Post
</title>
<style>
body{
    background-color: #c9c9c9;

}
h1, .para{
    border: 2px solid red;
    padding:10px;
}
</style>
</head>

<body>

<?php 
while($row1 = mysql_fetch_array($qry)){
?>
<h1><?php echo $row1['title']; ?> </h1>
<p class="para"><?php echo $row1['desc']; ?></p>
<?php }?>

</body>
</html>

的.htaccess

<IfModule mod_rewrite.c>

    RewriteEngine on

    RewriteRule ^post/([0-9]+) post.php?pid=$1 [NC]

</IfModule>

当我运行此代码时,网址会显示如下:

http://localhost/blog/post.php?pid=1

我想像这样显示网址

http://localhost/blog/post/1

解决方案已成功执行,但css样式无效。 Css样式放在css文件夹中

3 个答案:

答案 0 :(得分:0)

在htaccess文件中试试这个

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

您可以使用bootsrap类

class bootstrap {
    function __construct() {
        $url=isset($_GET['url']) ? $_GET['url'] : null;
        $url=rtrim($url,'/');
        $url = explode('/',$url );
        //print_r($url);
        if(empty($url[0])) {
            require 'controllers/index.php';
            $controller = new index();
            return false;
        }
        echo $url .'<br>';
        $file = 'controllers/' .$url[0]. '.php';
        if(file_exists($file)) {
            require $file;
        }
        else {
            require 'controllers/error.php';
            $controller = new error();
            return false;
        }

        $controller = new $url[0];
        if(isset($url[2])) {
            $controller ->{$url[1]}($url[2]);
        }
        else {
                if(isset($url[1])) {
                $controller ->{$url[1]}();
            }
        }
    }
}

答案 1 :(得分:0)

尝试使用 -

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ post.php?pid=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ post.php?pid=$1

答案 2 :(得分:0)

.htaccess用于解析url,它不用于生成URL。你需要重写行

<li><a href="post.php?pid=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a></li>

<li><a href="/blog/post/<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a></li>

你的.htaccess会工作