【发布时间】: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