@Paltinik

Как лучше сделать редирект?

На сайте страницы доступны по адресу site.ru/page
а так же они доступны по адресам site.ru/?page и site.ru/?q=page
хочу сделать редирект как в первом варианте что бы не было дублей..

или лучше даже 404 отдавать, так как страницы не были проиндексированы (сайт ещё в разработке)

Используется такой код в index.php:

<?php 
$req=mb_strtolower($_SERVER['REQUEST_URI']);
if($_SERVER['REQUEST_URI']!=$req){
header("HTTP/1.1 301 Moved Permanently");
header("Location: ".$req);
die();
}


include('core/init.php');

		$params = array();
        $query_string = str_replace('q=', '', trim($_SERVER['QUERY_STRING']));
        $query_string = urldecode($query_string);
        $query_params = explode("/",trim($query_string, '/'));
        foreach ($query_params as $query_param) {
        $params[] = htmlspecialchars(addslashes($query_param));
        };


if ($params[0] == 'home' && count($params) == "1"){
header("HTTP/1.1 302 Moved Permanently");
header("Location: /");
die();
}

if (!$params[0]) $params[0] = "home";


$file = join("/", $params);

$GLOBALS['page'] = $file;

$file = 'pages/' . $file . '.php';

if (file_exists($file)) {
include ($file);
} else if ($params[0] == "feedback" && count($params) == "1") {
include ('core/tpl/feedback.php');
} else  {
include ('core/tpl/404.php');
$GLOBALS['page'] = '404';
}
include('core/tpl/template.php');
?>


Такой в htacces
AddDefaultCharset utf-8
RewriteEngine on
RewriteBase /

RewriteRule ^(.+)/$ /$1 [R=301,L]
RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]


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


как сделать оптимальнее ?
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
@Paltinik Автор вопроса
Сделал на php

$req = parse_url($_SERVER['REQUEST_URI']);
$req = $req['path'];
if ($req != '/') {
$req = strtolower($req);
$req = preg_replace('#//+#','/',$req);
if ($req != '/') {
$req = rtrim($req, '/\\');
}
}

if ($_SERVER['REQUEST_URI'] != $req) {
  header('Location: '.$req,true,301);
  exit;
}


htacces
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* /index.php


Норм ? или лучше подобные запросы в htacces обрабатывать (типа удаление слешей, query string и тд ..)?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Kewa2008
@Kewa2008
Программист
В твоем случае редиректить через header не лучшая идея (ИМХО).
Я правильно понимаю что ты используешь какой-то фреймворк? Если да, то какой? Скорее всего в конфиге можно настроить роуты.
Если же без фреймворка работаешь, то копай с сторону .htacces

Должно получиться что-то вроде этого:

RewriteCond %{QUERY_STRING} action=page [NC]
RewriteCond %{QUERY_STRING} id=(\d+) [NC]
RewriteRule .* /page/%1/? [R=301,L]
Ответ написан
@stepar
через js
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы