【问题标题】:PHP Rewrite URL not getting right accessPHP 重写 URL 没有获得正确的访问权限
【发布时间】:2019-12-12 11:50:59
【问题描述】:

我有 switch case php 页面来检测 $_GET 函数并在页面之间进行更改。

$page = isset($_GET['p']) ? $_GET['p'] : null;
switch ($page) {
case "advertise":
break;
case "news":
break;
default:
break;

我尝试使用http://example.com/?p=news 访问“新闻”。我还在其中创建了一个分页,以便它可以使用http://example.com/?p=news&page=1

现在我想把网址改成一个友好的http://example.com/news 我创建了这个 htaccess

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?$1 [NC,L]

http://example.com/news 可以访问基本的“新闻”页面。问题是,我无法访问它之间的页面。

http://example.com/news/page=2

它会给我一个默认的“新闻”页面,而不给出该页面的任何页面。

有人可以弄清楚,如何将友好的 SEO url 与 Switch case $_GET 和 htaccess 一起使用?

============================编辑===================

$seourl = $settings['seo_link'];
if($seourl){
    $main_page = explode('/', $_SERVER['REQUEST_URI']);
    $page = substr(strtolower(preg_replace('([^a-zA-Z0-9-/])', '', $main_page[1])), 0, 20);
    $page_cat = isset($main_page[3]) ? $main_page[3] : null;
    $page_cat_name = isset($main_page[2]) ? $main_page[2] : null;
    $page_val = isset($main_page[5]) ? $main_page[5] : null;
}else{
    $main_page = parse_url($_SERVER['REQUEST_URI']);
    if (isset($main_page['query'])){
        parse_str($main_page['query'], $url);
    $pages = array();
    foreach ($url as $key => $value) {
        $pages[] = $url[$key];
    }
    $url_pages = array();
    foreach ($url as $key => $value) {
        $url_pages[] = $key;
    }
    $page = substr(strtolower(preg_replace('([^a-zA-Z0-9-/])', '', $pages['0'])), 0, 20);
    }else{
        $page = '';
    }
    $page_cat = isset($pages[1]) ? $pages[1] : null;
    $page_cat_name = isset($url_pages[1]) ? $url_pages[1] : null;
    $page_val = isset($pages[2]) ? $pages[2] : null;
}

if($seourl){
    function surl($link){
      $url = strtolower($link);
      $patterns = $replacements = array();
      $patterns[0] = '/([?&])p=/i';
      $replacements[0] = '/';
      $patterns[1] = '/[^a-zA-Z01-9]/i';
      $replacements[1] = '/';
      $patterns[2] = '/(-+)/i';
      $replacements[2] = '/';
      $patterns[3] = '/(-$|^-)/i';
      $replacements[3] = '';
      $url = preg_replace($patterns, $replacements, $url);
      return $url;
    }
}else{
    function surl($link){
            return $link;
    }
}  

通过使用它,我将能够打开和关闭 SEO url。

如果 SEO 网址关闭 (0)。我可以访问http://example.com/?p=news,甚至是页面http://example.com/?p=news&page=2。工作没有任何问题。

但如果 SEO 网址开启 (1)。我可以访问https://example.com/news,但无法访问页面http://example.com/news/page/2。它会给我这个页面的结果总是https://example.com/news

谁能帮帮我。请

【问题讨论】:

  • 你希望参数p从哪里来?您的原始 URL /news/page=2 不包含该名称,并且您要重写的内容也没有添加该名称的参数。
  • example.com/?p=news&page=1 从这里?参数 $_GET['p'] 将是“新闻”。如何做到这一点?
  • 那么您实际上想在客户端使用哪个 URL 进行分页 - /news/page=2?然后你要么必须在 PHP 中把它拆开,要么编写一个更具体的 RewriteRule,用这两个单独的参数将它重写到 index.php。
  • 实际上我在我的数据库中设置了一个值为 1 或 0 的选项,如果设置 SEO url 1 则使用斜杠,如果 0 则使用 $_GET 参数。更新第一篇,请看

标签: php url-rewriting get


【解决方案1】:

好吧,我找到了解决此问题的方法。

首先我们需要在函数 seo url 中添加这段代码

$paginates = isset($_GET['page']) ? $_GET['page'] : 1;

然后您的网址将像魅力一样发挥作用。谢谢大家帮助我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2011-06-24
    • 1970-01-01
    • 2021-04-15
    • 2013-09-26
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多