2

Таким образом, я использую следующий код htaccess для перенаправления URL-адресов для очистки перспективных URL-адресов, но теперь мне нужно, чтобы исходные URL-адреса перенаправлялись на новые чистые URL-адреса.Перенаправление путем запроса значения базы данных, такого как URL-адреса stackoverflow.com

Пример

Оригинальный URL:

example.com/search/store_info.php?store=113&dentist=Dr.%20John%20Doe 

Clean URL:

example.com/search/113/dr-john-doe 

Что мне нужно, это "ОРИГИНАЛ URL" для перенаправления на "ЧИСТОЙ URL ". Причина, по которой мне это нужно, заключается в том, что оба URL-адреса отображаются в результатах поиска Google.

Я хочу, чтобы чистый URL отображался, и в любое время, когда используется оригинальный URL, он должен автоматически перенаправляться на чистый URL. В настоящее время это не так.

Вот мой файл htaccess.

ErrorDocument 404 default 

<IfModule mod_rewrite.c> 
Options -MultiViews 
RewriteEngine On  
RewriteBase /search/ 

RewriteCond %{QUERY_STRING} . 
RewriteCond %{THE_REQUEST} /store_info\.php\?store=([a-z0-9]+)&dentist=([^\s&]+) [NC] 
RewriteRule^%1/%2/? [L,NE,R=301] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_URI} \.(?:jpe?g|gif|bmp|png|ico|tiff|css|js)$ [NC] 
RewriteRule^- [L] 

RewriteRule ^([a-z0-9]+)/([^\s.]*)[.\s]+(.*)$ $1/$2-$3 [NC,DPI,E=DONE:1] 

RewriteCond %{ENV:DONE} =1 
RewriteRule ^([0-9a-z]+)/([^\s.]+)$ $1/$2 [R=301,NE,L] 

RewriteRule ^([a-z0-9]+)/([a-z0-9-]+)/?$ store_info.php?store=$1&dentist=$2 [QSA,L,NC] 

</IfModule> 

Я читал о RedirectMatch однако я не знаю, где реализовать его в свой файл Htaccess.

+0

@anubhava это не перенаправляет .. так что если я иду в 'example.com/search/store_info.php магазин = 113' без" & dentist = Dr.% 20John% 20Doe "в URL-адресе идет по исходному URL-адресу и не конвертируется в чистую версию URL-адреса. Я хочу изменить это, где 'example.com/search/store_info.php? Store = 113' также переходит на чистый URL. Я пробовал 'Перенаправление 301 /search/store_info.php?store=118 http: // www.example.com/search/118/John-Doe-Dental-Group /' – antivinegar

+0

Могу ли я добавить, что ' & dentist = Dr.% 20John% 20Doe' добавляется к строке URL с помощью кнопки с предыдущей страницы. поэтому 'example.com/search/ store_info.php? store = 113' является исходным URL-адресом, который захватывает имя дантиста из URL-адреса, а затем использует файл htaccess для создания чистого URL-адреса. – antivinegar

+0

@anubhava, поэтому нет способа сделать это как [this] (http://stackoverflow.com/questions/38453161/rewriting-old-urls-to-pretty-urls-and-redirect-old-urls- к новой с-HTAccess)? Я знаю, что есть способ в файлах web.config. но я не могу понять в htaccess. – antivinegar

ответ

1

Внутри вашего store_info.php есть такой код:

<?php 
$store = $_GET['store']; 

if (empty($store)) { 
    header("HTTP/1.1 404 Not Found"); 
    exit; 
} 

$dentist = $_GET['dentist']); 

// pull dentist from DB by store id. Create this function in PHP and 
// query your database 
$dentistFromDB = preg_replace('/[\h.]+/', '-', $row['businessName']); 

// DB returns an empty or no value 
if (empty($dentistFromDB)) { 
    header("HTTP/1.1 404 Not Found"); 
    exit; 
} 

// DB returned value doesn't match the value in URL 
if ($dentistFromDB != $dentist) { 
    // redirect with 301 to correct /<store>/<dentist> page 
    header ('HTTP/1.1 301 Moved Permanently'); 
    header('Location: /' . $store . '/' . $dentistFromDB); 
    exit; 
} 

// rest of the PHP code should come now 

?> 
0

Вам больше не нужно загромождать свой файл htaccess с помощью произвольных правил/директив. Нынешний набор правил с совпадением %{THE_REQUEST}, а затем с условиями %{ENV=DONE} более чем достаточно.

Просто подождите несколько дней, пока Google не сканирует ваши страницы снова, и старые нечистые URL-адреса исчезнут. Вы также можете выполнить поиск в Инструментах Google для веб-мастеров, чтобы узнать, можно ли это запустить вручную.

PS: Вы можете удалить линию RewriteCond %{QUERY_STRING} . из своего первого правила.

 Смежные вопросы

  • Нет связанных вопросов^_^