PHP URL重写无法正常工作

时间:2017-07-08 16:28:18

标签: regex .htaccess mod-rewrite

我正在研究我网站的分页结构,目前这就是网址的样子:

  www.example.com/test/?page=3

我希望它看起来像这样:

  www.example.com/test/3

这里的用户通过PHP中的URL提取帮助我实现了这一点,这解决了我的问题。当我将代码放在我的PHP代码中时,它不会修复地址栏中的URL,而是在UI中将正确的URL添加为字符串。

这是一个屏幕截图,向您展示我的意思。       https://imgur.com/TGInt7W

PHP代码的第一部分是URL提取的逻辑,第二部分是生成URL的PHP​​代码。

 <?php
    function http_protocol() {
        return (isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://';
    }

    function http_host() {
        return $_SERVER['HTTP_HOST'];
    }

    function http_uri() {
        return parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
    }

    function http_refactored_query_strings() {
        $queries = explode('&', $_SERVER['QUERY_STRING']);
        $refactoredQueries = [];

        foreach( $queries as $query ) {
            $refactoredQueries[] = filter_var(explode('=', $query)[1], FILTER_SANITIZE_STRING);
        }

        $queries = implode('/', $refactoredQueries);
        return $queries ?: '';
    }

    function http_refactored_url() {
        return http_protocol() . http_host() . http_uri() .  http_refactored_query_strings();
    }

    echo http_refactored_url();
    ?>
    <?php
    class Pagination {
    public $current_page;
    public $per_page;
    public $total_count;
    public $pages_articles;

    public function __construct($page=1, $per_page=20, $total_count=0) {
    $this->current_page = (int)$page;
    $this->per_page = (int)$per_page;
    $this->total_count = (int)$total_count;
    $this->pages_articles=array(
    '<div class="article-loop"><img src="http://i.imgur.com/CmU3tnl.jpg"></div>',
    '<div class="article-loop"><img src="http://i.imgur.com/TDdxS9H.png"></div>',
    '<div class="article-loop"><img src="http://i.imgur.com/39rpmwB.jpg"></div>',
    '<div class="article-loop"><img src="http://i.imgur.com/1lBZQ1B.png"></div>',
    '<div class="article-loop"><img src="https://i.imgur.com/Y5Ld4Qfh.jpg"></div>',
    '<div class="article-loop"><img src="http://i.imgur.com/wQVPRVp.png"></div>');
    $this->total_count = sizeof($this->pages_articles);
    }

    public function offset() {
    return ($this->current_page - 1) * $this->per_page;
     }
    public function total_pages() {
    return ceil($this->total_count/$this->per_page);
     }
    public function previous_page() {
    return $this->current_page - 1;
     } 
    public function next_page() {
    return $this->current_page + 1;
     }
    public function has_previous_page() {
    return $this->previous_page() >= 1 ? true : false;
     }
    public function has_next_page() {
    return $this->next_page() <= $this->total_pages() ? true : false;
     }
    }
    $page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
    $per_page = 3;
    $pagination = new Pagination($page, $per_page, $total_count);
    ?>

    <html>
    <body>
    <div>
    <?php
      $i = $pagination->offset()  ;
        $limit = $pagination->per_page;
        while($i<$pagination->total_count && $limit>0) {
            echo $pagination->pages_articles[$i]."<br>";
            $i++;
            $limit--;
        }
    ?>
    </div>
    <ul>
    <?php
    if($pagination->has_previous_page()) {
        echo '<li style="display:inline"><a href="?page='.$pagination->previous_page().'">&laquo;</a></li>';
    } else {
        echo '<li style="display:inline" class="disabled"><a href="#">&laquo;</a></li>';
    }
    for($i=1; $i<=$pagination->total_pages(); $i++) {
        echo '<a href="?page='.$i.'"><li style="display:inline; margin-left:5px; margin-right:5px">'.$i.'</li></a>';
    }
    if($pagination->has_next_page()) {
        echo '<li style="display:inline"><a href="?page='.$pagination->next_page().'">&raquo;</a></li>';
    } else {
        echo '<li style="display:inline" class="disabled"><a href="#">&raquo;</a></li>';
    }
    ?>
    </ul>
    </body>
    </html>

https://3v4l.org/YE9Sb

这就是htaccess文件的样子:

 RewriteBase /  
 RewriteEngine on
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME}\.html -f
 RewriteRule ^(.*)$ $1.html
 RewriteCond %{REQUEST_URI} /index\.html?$ [NC]
 RewriteRule ^(.*)index\.html?$ "/$1" [NC,R=301,NE,L]

0 个答案:

没有答案