2010-05-26 2 views
1

В настоящее время у меня есть URL, как этотSEO Friendly URL для динамического URL с помощью PHP

http://<client_name>.website.com/index.php?function_name&cat=32 

Я хочу, чтобы настроить систему так, чтобы наши маркетинговые люди могут публиковать URL, как

http://<client_name>.website.com/<parent_category>/<category> 

«кошки = XX "будет генерироваться только из последних <category>. Но маркетинг хочет использовать родительскую категорию в своих кампаниях. В настоящее время мы передаем весь URL-адрес через index.php в корневой каталог html (это станет важным позже).

Я пробовал несколько решений, в том числе:

  1. mod_rewrite - проблема такого подхода заключается в том, что он становится огромный файл .htaccess, так как мы должны написать правила для каждой категории.

  2. RewriteMap - это было довольно близко, так как я мог запросить базу данных для создания файла карты для вывода. Однако с тех пор я узнал, что у нас нет доступа к httpd.conf.

  3. index.php - Я попытался запустить все через наш файл index.php, который работает, но не поддерживает URL-адрес в браузере, дружественный для целей SEO.

Я надеюсь, что у кого-то есть другая идея, которая может помочь, я бы очень признателен. Если у вас есть ссылка на что-то в Интернете, это поможет сделать это тоже здорово.

+1

1. это путь. вы можете создать правило с регулярным выражением, чтобы оно охватывало все категории. – Galen

+0

Если 'http: // .website.com/index.php//' достаточно, вы можете использовать '$ _SERVER [" PATH_INFO "]' –

+0

, и если этого не достаточно, IIRC вы можете все еще исправляйте его с помощью mod_rewrite, не делая этого для каждой категории (бессмыслица!). Посмотрите, как работает mediawiki. –

ответ

6

Почему бы не перенаправить все запросы в index.php с помощью mod_rewrite и использовать PHP для написания логики маршрутизации, которая кажется более надежной, чем запись отдельных правил перезаписи?

Как просто .htaccess, как это один

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?request=$1 [QSA,L] 

И несколько строк PHP кода в index.php

$client_name = strtok($_SERVER['HTTP_HOST'],"."); 
list ($cat,$subcat) = explode("/",trim($_GET['request'],"/")); 
+0

Да, но я хочу сохранить URL как красивый, но нужно передать его как «cat =». –

+0

@John Swaringen: URL-адрес браузера останется прежним. Только за кулисами произойдет это преобразование. – webbiedave

+0

Я использую описанный здесь метод. Mod переписать, чтобы скрыть index.php, а затем построить систему маршрутизации в PHP - это позволяет вам абстрагировать правила, чтобы вы могли иметь отдельные маршрутизаторы для разных разделов сайта. Посмотрите, как Joomla обрабатывает маршрутизаторы - вы указываете строитель и парсер.При синтаксическом анализе вы просто прокручиваете различные сегменты и присваиваете каждому значение, чтобы вы все еще могли иметь «cat = blah», –

1

В дополнение к ответу полковника шрапнельного, по крайней мере стройной выбора вниз :

RewriteRule ^/([-a-zA-Z0-9_]+)/([0-9]+)$ index.php?function_name=$1&cat=$2 [L,QSA] # domain.com/cat_name/23 is sent to the server as domain.com/index.php?function_name=cat_name&cat=23 
Смежные вопросы