Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne]Przyjazne URL
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam.
Robię taki większy serwis i przydały by mi się krótkie url typu:

http://mojastrona.pl/bazy_danych

jak na razie udało mi się zrobić takie coś:

http://mojastrona.pl/?page=bazy_danych

Jak pozbyć się tego: ?page= questionmark.gif
Mój kod htaccess:

Kod
Options -Indexes
RewriteEngine On
RewriteRule ^index.(php|html|htm)$ / [R=301,L]
RewriteRule ^([a-z0-9-_]+)/index.(php|html|htm)$ /$1/ [R=301,L]


Bardzo proszę o pomoc, ponieważ pierwszy raz takie coś robię. Czytałem już wiele poradników, ale nie bardzo z nich cokolwiek rozumiem.
Z góry dziękuje smile.gif
Pozdrawiam.
erix
A wpisałeś chociaż w google tytuł swojego wątku...? withstupidsmiley.gif
adrianozo
Tak i nie mogę znaleźć dokładnej odpowiedzi
adrianozo
Nadal nie mogę znaleźć tego co oczekuję sad.gif
Mlodycompany
na portalu php.pl nie na forum znajdziesz caly artykul na ten temat. tam jest wszystko fajnie opisane
adrianozo
Tak znalazłem, ale nie w htaccess sad.gif
Mlodycompany
Kod
<Files sklep>
ForceType application/x-httpd-php
</Files>


Wstawiasz to do htaccess i juz powinno dzialac

adrianozo
Co mam rozumieć pod napisem sklep?

Gdy wrzuciłem to tak jak podałeś to nie działa
Mlodycompany
sklep to tylko napis. dokladnie nie wiem o co kaman z tym więc ci nie powiem. wrzuc ten kod do tego pliku i usun reszte. otworz strone http://localhost/strona/ powinno wczytac strona.php

erix
~adrianozo, uprzedzę Cię tylko, że na tacy nie dostaniesz. Przeczytaj z łaski swojej zalinkowany artykuł. Wszystko jest opisane, tylko trzeba czytać ze ZROZUMIENIEM, a nie tylko oglądać literki.
wNogachSpisz
Mozesz skrócić URL bez używania HTACCESS

http://example.com?baza_danych

a przechwytujesz to przez:

current(array_keys($_GET));

adrianozo
Mam jeszcze kilka pytań co do przyjaznych URL.

htaccess:

Kod
Options -Indexes
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^([a-z0-9_-]+) index.php?page=$1 [L]


1.
Kod
<form action="/szukaj" method="get">
<input type="text" name="wynik" id="szukaj-text" size="15" />
<input type="submit" id="szukaj-submit" value="Szukaj" />
</form>

Tak wygląda mój formularz do wyszukiwarki. I teraz mam problem ponieważ, gdy wpiszę w wyszukiwarkę htaccess to powstaje taki link:
szukaj?wynik=htaccess, a chcę, żeby tworzył się taki: szukaj/htaccess

2. Strona jest oparta o PHP i MySql taki mini CMS. I pytanie brzmi:
Gdy wejdę w zakładkę kategorie i wybiorę daną kategorie to pewnie adres jaki się utworzy będzie to:
/kategoria?kategoria=nazwa kategorii, a chciałbym takie coś:
/kategoria/nazwa kategorii.

3. To samo tyczy się ze stronicowaniem wyników:
Adres jaki się utworzy to np.
/news&subpage=2
a chciałbym
/news/2

Zupełnie nie wiem ja się za to zabrać.
Mam nadzieje, że jasno to wytłumaczyłem.
Proszę o pomoc smile.gif
Z góry dziękuje
xix
strasznie nie lubie, jak ktos odpowiada, ze ten temat juz byl i trzeba szukac odpowiedzi w archiwum. swiat sie zmienia przeciez. jesli kilka dni temu cos bylo OK, to dzisiaj juz moze istniec cos lepszego i nie warto w dodatku tracic czasu na archiwa.
ja mam w htaccess takie cos:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

nawet sie nie wglebiam, czy jest to prawidlowe, ale dziala. nie ma co czasu tracic.
tu jest cos jeszcze o htaccess:
http://mirificampress.com/permalink/beyond...les_in_htaccess
erix
~adrianozo: http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html

Przeczytaj sobie, ale UWAŻNIE.

Cytat
strasznie nie lubie, jak ktos odpowiada, ze ten temat juz byl i trzeba szukac odpowiedzi w archiwum. swiat sie zmienia przeciez. jesli kilka dni temu cos bylo OK, to dzisiaj juz moze istniec cos lepszego i nie warto w dodatku tracic czasu na archiwa.

A ja strasznie nie lubię, gdy ktoś nie używa wyszukiwarki wpisując chociażby wprost, czego potrzebuje. Owszem, zmienia się, ale wyrażenia regularne, składnia przepisywania adresu jest niezmienna od paru lat.

Jest taka zasada - Nie trać czasu na rozwiązywanie problemów już rozwiązanych. Na Świecie jest tyle innych, którym jeszcze nikt nie stawił czoła, to one są warte tego czasu.
adrianozo
Dzięki erix, ale już po raz n'ty czytam ten kurs i tam zbytnio jasno(przynajmniej dla mnie nie jest rozpisane). Ale mniej więcej już wiem co i jak smile.gif

Nie rozumiem dlaczego po takim kodzie htaccess:

Kod
Options -Indexes
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^szukaj/(.*) szukaj.php?wynik=$1 [L]
RewriteRule ^kategoria/([a-z0-9_-]+) kategoria?kategoria=$1 [L]
RewriteRule ^news/([0-9]+) news&subpage=$1 [L]
RewriteRule ^([a-z0-9_-]+) index.php?page=$1 [L]


Po 1 nie czyta mi stylu
Po 2 wyrzuca mi napis: Wystąpił błąd.
Niepoprawna nazwa pliku.

index.php
  1. <link rel="stylesheet" type="text/css" media="all" href="style.css" />
  2. <base href="http://www.nazwastrony.pl" />
  3. <?php
  4. if (!empty($_GET['page']))
  5. {
  6. switch($_GET['page'])
  7. {
  8. case 'algorytmy':
  9. include('strona/algorytmy.php');
  10. break;
  11. case 'arkusz_kalkulacyjny':
  12. include('strona/arkusz_kalkulacyjny.php');
  13. break;
  14. case 'bazy_danych':
  15. include('strona/bazy_danych.php');
  16. break;
  17. case 'testy':
  18. include('strona/testy.php');
  19. break;
  20. case 'mapa':
  21. include('strona/mapa.php');
  22. break;
  23. case 'kategoria':
  24. include('strona/kategoria.php');
  25. break;
  26. case 'licencja':
  27. include('strona/licencja.php');
  28. break;
  29. case 'szukaj':
  30. include('strona/szukaj.php');
  31. break;
  32. case 'paneladmina':
  33. include('panel/paneladmina.php');
  34. break;
  35. case 'dodaj':
  36. include('panel/dodaj.php');
  37. break;
  38. case 'edytuj':
  39. include('panel/edytuj.php');
  40. break;
  41. case 'usun':
  42. include('panel/usun.php');
  43. break;
  44. case 'zmien_haslo':
  45. include('panel/zmien_haslo.php');
  46. break;
  47. case 'rozmiar_pliku':
  48. include('panel/rozmiar_pliku.php');
  49. break;
  50. case 'ban':
  51. include('panel/ban.php');
  52. break;
  53. case 'komunikat':
  54. include('panel/komunikat.php');
  55. break;
  56. default :
  57. echo '<div style="text-align:center;">Wystąpił błąd.<br /> Niepoprawna nazwa pliku.</div>';
  58. break;
  59. }
  60. }
  61. else
  62. {
  63. include('strona/home.php');
  64. }
  65. ?>


<link rel="stylesheet" type="text/css" media="all" href="style.css" />
<base href="http://www.nazwastrony.pl" />
są w sekcji head

Dobra jak na razie sobie poradziłem. Po prostu usunąłem flagi wszędzie.

Witam. Jak pobrać zmienna get z poniższego formularza wykorzystaniem mod rewrite?

Mój htaccess:

Kod
Options -Indexes
Options -Indexes
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^([a-z0-9_-]+) index.php?page=$1
RewriteRule ^szukaj$ ?site=szukaj&wynik=$1 [QSA]



Formularz:

Kod
<form action="szukaj" method="get">
<input type="text" name="wynik">
<input type="submit" value="Szukaj" />
</form>


Adres po wpisaniu w wyszukiwarkę:

http://www.mojastrona.pl/szukaj?wynik=dasd

dasd to co wpisałem w wyszukiwarkę.

Co jest nie tak?
Jak powinna wyglądać formuła?
erix
A próbowałeś dopisać flagę do drugiej reguły?

Czy chcesz wstawić zmienną z GET do podstawnika? Jeśli tak, to znowu odsyłam do mojego artykułu, jest tam to opisane.
adrianozo
szukaj.php

Kod
<form action="szukaj" method="get" action="/szukaj">
<input type="text" name="wynik">
<input type="submit" value="Szukaj" />
</form>
<script type="text/javascript">
window.onload = function()
{
var form = document.getElementById('szukaj');
form.onsubmit = function()
{
window.location.replace('/szukaj/'+encodeURIComponent(form.getElementsByName('wynik')[0].value));
return false;
}  
}
</script>


htaccess:

Kod
Options -Indexes
Options FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^([a-z0-9_-]+) index.php?page=$1
RewriteRule ^szukaj$ ?site=szukaj&wynik=$1 [QSA]


Nie działa sad.gif
erix
Heh, ale precyzyjny opis, pogratulować.

Żadnych błędów? Idąc do lekarza mówisz boli mnie, ale co boli, co już nie powiesz?
tog
ale w kursie pisze jak byk
ze masz zrobic plik 'sklep'
bez rozszerzenia, nie 'sklep.php' tylko samo 'sklep'
i pozniej to piszesz w .htaccess
jak zrobic pik 'gowno' to w .htaccess piszesz
<Files gowno>
ForceType application/x-httpd-php
</Files>

jesli chodzi o plik
sklep/gowno

$_SERVER['PATH_INFO']; to Twoj adres
czyli jak masz gowno/hehe/haha to to Ci pokaze $_SERVER['PATH_INFO'];
czyli echo $_SERVER['PATH_INFO']; wyswietli '/hehe/haha'
mozesz tez to zapisac do zmiennej
$address = $_SERVER['PATH_INFO'];
a pozniej echo $address;
i wyswietli '/hehe/haha', czy co tam sobie wpiszesz
jak juz masz swoj adres w zmiennej to mozesz zrobic z nim co tylko chcesz
adrianozo
W sumie racja. Przepraszam smile.gif

Poprawka.
Może pokaże co i jak na linku:

http://www.informatyka-zadania.info/szukaj
Gdy wpiszemy w wyszukiwarkę forum.php.pl
to tworzy się adres:

http://informatyka-zadania.info/szukaj?wynik=forum.php.pl

zamiast:

http://informatyka-zadania.info/szukaj/forum.php.pl

Dlaczego? Co może być nie tak?
tog
trzaba bylo dac w tytule "przyjazne urle i formularz z metoda GET" czy cos...
mozesz tutaj uzyc jsa
uzyj getElementByld aby pobrac to co uzytkownik wpisal do wyszukiwarki
pozniej zrob przekierowanie na adres
'http://informatyka-zadania.info/szukaj/'+ZmiennaZWyszukiwarki

PS: ale oczywiscie js nei kazdy obsluguje
mozesz nawet zrobic przekierowanie uzywajac php
bedzie troche wolniejsze, ale jak Ci bardzo zalezy to da rade
albo zostawic jak jest i tez bedzie dobrze ;]
adrianozo
Jak już przyjazne to na całej stronie.
Najlepiej przy pomocy PHP. Jak to zrobić?
tog
tak czy inaczej przez chwile bedzie widoczny "nieladny adres"
jak ktos cos wpisze w szukaczke "forum php"
to przeniesie go na ?search=forum%20php
musisz zrobic skrypt ktory zamieni ten adres na /szukaj/forum_php, czy co tam chcesz i wyswietlic cos takiego
echo '<przekierowanie url="/szukaj/forum_php" />';
(nie pamietam jak sie robi przekierowanie w htmlu, ale latwo znajdziesz)
czyli user zobaczy strone z zwyklym adresem, ale zaraz zostanie przeneisiony

przy uzyciu js user nie widzialby zwyklego adresu tylko odrazu zostalby wyslany do 'przyjaznego' adresu
i to rozwiazanie polecam, ale nalezaloby tez przygotowac ta wolniejsza wersje php dla uzytkownikow bez js

byc moze jest inny sposob na rozwiazanie problemu
ale mi nic takiego nei przychodzi do glowy

ja i tak zostawilbym normalny link dla wyszukiwarki
erix
http://eriz.pcinside.pl/weblog/mod_rewrite...ac-208.html#t85

Nie ma możliwości przepisywania żądań z formularzy bez JS. Musisz się z tym pogodzić.

Uprzedzam Twoje pytanie: a może da się? - nie, NIE DA SIĘ.
adrianozo
W takim razie co w przypadku, gdy ktoś ma wyłączoną obsługę JS?
erix
Idzie normalnie po GET, ze znakiem zapytania. Dlatego odradzamy takie kombinowanie.

Inaczej się nie da, pogódź się z tym.
tog
nawet strona kursu html i webmade tego nie maja tongue.gif
i ja nie widze problemu... w ogole w wiekszosci przypadkow mozna sobie darowac te urle
adrianozo
Ok dzięki za informacje smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.