Подробно обяснение за .htaccess

sentenello

Registered
Здравейте,
Целта ми е да направя линковете на сайта ми да са
www.saita.com/match/otbor1-otbor2-liga-pyrvenstvo-data
а не както са сега
http://www.saita.com/match/?id=1

Знам, че всичко това става с .htaccess, но ми трябва някой да обясни като за начинаещ в тази сфера. Как може .htaccess файла да разбира кой е мача в БД според ид-то и според това кой е мача да прави линка?
 
Код:
RewriteRule ^match/([0-9]+)-([0-9]+)-liga-pyrvenstvo-data$ match.php?otbor1=$1&otbor2=$2
Та какво става? Тези $1 и $2 вземат стойноста на $_GET['otbor1'] и $_GET['otbor2'];
PHP:
echo $_GET['otbor1'] . ' - ' . $_GET['otbor2'];
 
Това трябва да напиша в .htaccess файла и да го сложа в папката в която е match.php ?
 
htaccess е в главната директория public_html, след като напишеш това условие в htaccess, после на мястото на линка във файла ти, ако е нещо такова match.php?otpor1=22&otbor2=23&data=12121212121 само променяш пътя на линка, един вид ще се поличи match/otbor1-otbor2-liga-pyrvenstvo-data

в htaccess

RewriteRule ^match/otbor([0-9]+)-otbor([0-9]+)-liga-pyrvenstvo-([^\/.*]+)?$ match.php?otbor1=$1&otbor2=$2&data=$3 [L]

otbor1 = ид на първия отбор (Гет променлива)
otbor2 = ид на втория отбор (Гет променлива)
data = променливата от датата (Гет променлива)

дано си ме разбрал, това в скобите ([0-9]+) взема само цифри, а това ([^\/.*]+) взема всичко от съдържанието на променливата дата
 
Вместо ([^\/.*]+) можеш да напишеш и (.*) можеш също ([^/]+). Но това match.php е файла на който задаваш гет променливите. Гледай го по следния начин. Се едно в браузъра пишеш реалния път, който би трябвало да е: http://example.com/match.php?otbor1=2&otbor2=3 та заместваш реално този код: match.php?otbor1=$1&otbor2=$2. Като стойностите ги подреждаш по цифрен възходящ ред 1,2,3,4 и пред тях трябва да има $, това значи, че му задаваш стойност. След което кода ти трябва да изглежда така: ^match/([0-9]+)-([0-9]+)-data$ по този начин първото 0-9 взема първата стойност която е $1, а второто 0-9 взема втората стойност която е $2. :?:
Код:
RewriteRule ^match/([0-9]+)-([0-9]+)-liga-pyrvenstvo-data$ match.php?otbor1=$1&otbor2=$2 [L]
:?:
 
Ако съм ви разбрал правилно сега трябва да направя линка да не е

www.saita.com/match/?id=12
a
www.saita.com/match/?otbor1=$1&otbor2=$2&liga=$3

След което е .htaccess-a слагам

RewriteRule ^match/([0-9]+)-([0-9]+)-data$ match.php?otbor1=$1&otbor2=$2&liga=$3


П.С. Съжалявам за тези въпроси, но хич не мога да го разбера как работи тоя .htaccess
 
А ти искаш и лига. Значи така трябва да изглежда:
Код:
RewriteRule ^match/([0-9]+)-([0-9]+)-([^/]+)$ match.php?otbor1=$1&otbor2=$2&liga=$3 [L]
Като това match.php трябва да ти е файла който взема тези променливи. Представи си index.php като му сложих $_GET['page'];
При него става така:
Код:
RewriteRule ^([^/]+)$ index.php?page=$1 [L]
Така станицата се отваря примерно вместо index.php?page=Tourist се отваря /Tourist. Така и горе. вместо match.php слагаш php файла който взема тези променливи.

Дано си ме разбрал. :?:
 
Шантава работа :D
Главата ми се размъти нацяло. Единствения ми проблем според мен е, че не знам как да направя това $1 в .htaccess-a да взема самия отбор.

Казваш ми, че $1 ще взема $_GET['otbor1'] в първия случай, но как да направя $_GET['otbor1'] да е името на първия отбор, след като аз със заявка изкарвам отборите според ид-то.

Ето как разбирам кой са отборите
Код:
$getid = $_GET['id'];
$sql = mysql_query("SELECT * FROM programa where id ='$getid'");
 
sentenello каза:
Шантава работа :D
Главата ми се размъти нацяло. Единствения ми проблем според мен е, че не знам как да направя това $1 в .htaccess-a да взема самия отбор.

Казваш ми, че $1 ще взема $_GET['otbor1'] в първия случай, но как да направя $_GET['otbor1'] да е името на първия отбор, след като аз със заявка изкарвам отборите според ид-то.

Ето как разбирам кой са отборите
Код:
$getid = $_GET['id'];
$sql = mysql_query("SELECT * FROM programa where id ='$getid'");
Така ето ти чист код:
htaccess:
Код:
RewriteRule ^match/([0-9]+)-([0-9]+)$ match.php?otbor1=$1&otbor2=$2 [L]
match.php:
PHP:
printf('Otbor 1: %s - Otbor 2: %s', $_GET['otbor1'], $_GET['otbor2']);
 
Извинете ме за спама, искам само да попитам .htaccess работи ли на локалхост или трябва сайта да е пуснат в нета за да работи?
 
teroristd каза:
Извинете ме за спама, искам само да попитам .htaccess работи ли на локалхост или трябва сайта да е пуснат в нета за да работи?

Работи на localhost :)
 
Ev0luti0N каза:
sentenello каза:
Шантава работа :D
Главата ми се размъти нацяло. Единствения ми проблем според мен е, че не знам как да направя това $1 в .htaccess-a да взема самия отбор.

Казваш ми, че $1 ще взема $_GET['otbor1'] в първия случай, но как да направя $_GET['otbor1'] да е името на първия отбор, след като аз със заявка изкарвам отборите според ид-то.

Ето как разбирам кой са отборите
Код:
$getid = $_GET['id'];
$sql = mysql_query("SELECT * FROM programa where id ='$getid'");
Така ето ти чист код:
htaccess:
Код:
RewriteRule ^match/([0-9]+)-([0-9]+)$ match.php?otbor1=$1&otbor2=$2 [L]
match.php:
PHP:
printf('Otbor 1: %s - Otbor 2: %s', $_GET['otbor1'], $_GET['otbor2']);

Знам, че вече ти е писнало да ми обясняваш едно и също, но не мога да го схвана, затова ще се опитам да ти обясня по подробно, за да разбереш кое не мога да схвана.

Самия ми match.php е с 285 реда код като си като според ид-то което му е зададено (match/?id=1) ми изкарва и дадения мач. В случая (id=1) правя заявка към БД и вземам поле отбор1 и отбор2 в ред от таблицата с ид=1. До тук всичко ясно.
Как да направя в match.php $_GET['otbor1'] да е $row[otbor1], че да може после в .htaccess match.php?otbor1=$1 това $1 да взема правилната стойност?
 
Доколкото разбрах ти искаш да вземеш отбор 1 и отбор 2. ГЕТ променливите трябва да са ти: $_GET['otbor1'] и $_GET['otbor2']. За да проработи трябва match да изглежда по следния начин: match.php?otbor1=ID на отбор 1&otbor2=ID на отбор 2. За да стане с Rewrite трябва да изглежда така:
Код:
RewriteRule ^match/([0-9]+)-([0-9]+)$ match.php?otbor1=$1&otbor2=$2 [L]
Така ще правиш вместо match.php?otbor1=5&otbor2=9 - match/5-9.
Ако искаш само за единия отбор.
Код:
RewriteRule ^match/([0-9]+)$ match.php?otbor1=$1 [L]
Така ще правиш вместо match.php?otbor1=5 - match/5.
 
Мисля, че вече схванах, но в таблицата от която вадя мачовете нямам ид на отборите.

Ако съм те разбрал правилно.
Правя:
match.php?otbor1=$row[domakin]&otbor2=$row[gost]
което ще доведе до тоя линк примерно
match.php?otbor1=ЦСКА&otbor2=ЛЕВСКИ

След което с
RewriteRule ^match/([0-9]+)-([0-9]+)$ match.php?otbor1=$1&otbor2=$2 [L]

линка ще се преобразува на
match/ЦСКА-ЛЕВСКИ

Правилно ли съм разбрал ?
 
sentenello каза:
Мисля, че вече схванах, но в таблицата от която вадя мачовете нямам ид на отборите.

Ако съм те разбрал правилно.
Правя:
match.php?otbor1=$row[domakin]&otbor2=$row[gost]
което ще доведе до тоя линк примерно
match.php?otbor1=ЦСКА&otbor2=ЛЕВСКИ

След което с
RewriteRule ^match/([0-9]+)-([0-9]+)$ match.php?otbor1=$1&otbor2=$2 [L]

линка ще се преобразува на
match/ЦСКА-ЛЕВСКИ

Правилно ли съм разбрал ?
Донякъде: значи ако искаш да излизат имената първо няма да е ([0-9]+) ами трябва да е ([aA-zZ]+). Също ако и аз правилно съм те разбрал $row[domakin] и $row[gost] са ти линк значи ще работи. Под линк имам предвид имаш някъде <a href="match.php?otbor1=$row[domakin]&otbor2=$row[gost]">Гледай</a>. Но задължително трябва да поддадеш 2 ГЕТ Променливи с имената otbor1 и otbor2 след което те се вземат от PHP файла отиват в SQL заявката и след това с MYSQL и извеждаш резултатите. :)
 
За да успея да го направя трябва да пробвам първо с по-просто.

Значи.
В момента в match.php имам $getid = $_GET['id'];
и линка към мача ми става www.saita.com/match/?id=1

Сложих в .htaccess ето този код
RewriteRule ^match/([0-9]+)$ /pyrvenstva/match.php?id=$1 [L]

като съм оказал пътя до match.php. При този вариант линка не трябва ли да стане www.saita.com/match/1, защото не става
 
sentenello каза:
За да успея да го направя трябва да пробвам първо с по-просто.

Значи.
В момента в match.php имам $getid = $_GET['id'];
и линка към мача ми става www.saita.com/match/?id=1

Сложих в .htaccess ето този код
RewriteRule ^match/([0-9]+)$ /pyrvenstva/match.php?id=$1 [L]

като съм оказал пътя до match.php. При този вариант линка не трябва ли да стане www.saita.com/match/1, защото не става
Каква грешка ти дава?
В момента излизам отивам на тренировка като се върна ще видя отговора ти и ще ти помогна ако някой друг потребител не ти е помогнал до тогава. :?:
 
Когато отворя
www.saita.com/match/1
Не ми излиза информацията за срещата, все едно $getid = $_GET['id']; не работи и от там не може да ми изкара информацията.

П.С.Сега се сетих, че нямам папка match и се чудя дали това не ви обърква.
 

Back
Горе