апр 1

Скоро в отдела ще имаме нов колега занимаващ се със SEO на сайтовете които разработваме и администрираме. Едно от първите му изисквания бе да се преобразуват връзките в текущите страници. Тоест досега бяха / и все още са :) / http://example.com/cgi-bin/index.cgi?param1=1&param2=2, а изискването е да са в така наречения seo friendly или slashed формат http://example.com/param1/1/param2/2. Тъй като начело с мен всички в отдела който оглавявам са непростимо мързеливи, когато се мисли нова идеология и структура на динамичен сайт стремежа е всичко да е максимално опростено и гъвкаво, за да може в бъдеще да се правят лесни промени, както и лесно поддържка. Това в случая доведе до някои неудобства, тъй като не искахме да променяме нищо по кода на страниците . На пръв поглед нещата изглеждат лесни, но изникнаха и следните въпроси :

  1. Различен брой и имена на параметри.
  2. Всички заявки отиват към един единствен скрипт /cgi-bin/index.cgi което не позволява други хитринки.
  3. Както казах вече се стрмим всичко да е универсално. Тоест гледах да избягаме варианта с 300 и по вече реда .htaccess файл .
  4. Други които не се сещам в момента, но излизаха постоянно в процеса на работа.

Решението на което се спрях в момента е следното :

В директивата <Directory> където се намират файловете за съответния домейн или вирутален хост се поставят опциите +FollowSymLinks и/или +SymLinksIfOwnerMatch, също и AllowOverride All . Във файла .htaccess добавяме :

#Включваме rewrite модула
RewriteEngine On
#Указваме базовата директория
RewriteBase /

#Пропускаме всички файлове с посочените разширения и поставяме условие да се отнася за заявки които не са файл или директория
RewriteCond %{REQUEST_FILENAME} !\.(css|jpg|gif|png|js)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#Тук условието съвпада, ако имаме подаден само 1 параметър
RewriteCond $3 =”"
RewriteRule ^([^/]+)/([^/]+)[/&]?(.*)$ /cgi-bin/index.cgi?$1=$2

# Отново условията за файловите разширения и типа подадена заявка
RewriteCond %{REQUEST_FILENAME} !\.(css|jpg|gif|png|js)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#Тук е интересното :) това условие съвпада независимо от броя подадени параметри и съответно премахва символите “?” и “&”
RewriteCond $3 !=”"
RewriteRule ^([^/]+)/([^/]+)[/&](.*)$ /cgi-bin/index.cgi?$3&$1=$2


При мен всичко сработи и в момента го тествам. Има още идеи, като например използваните на RewriteMap с която могат да се правят невероятни магии :) , при наличие на време ще опиша кое е крайното решение на което съм се спрял. Не претендирам да съм бил изчерпателен или безгрешен /това ми е първото ръководство/ , но бих се радвал на критики, мнения и препоръки.

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.