Htaccess i Redirect zamiast wyszukiwarki


(Abrimaal) #1

Całość ma składać się z pliku .htaccess i okienka wpisywania tekstu na stronie. Htaccess zawiera na razie same Redirect.
Użytkownik strony będzie wpisywał czego szuka, a redirect zrobi resztę.
Teraz pytania

  1. Fraza wpisana w okienku wyszukiwania ma być dodana do stałego adresu, czyli
    Ktoś wpisuje np. info, skrypt łączy to w http://example.pl/info i wywołuje adres
    Okienko to będzie prawdopodobnie html form
    Resztę załatwia htaccess.
    Gdzie znajdę skrypt który połączy adres i wpisany tekst?

  2. Pisownia. W pliku htaccess mogą znaleźć się instrukcje, które pozwolą zmniejszyć ilość przekierowań. Na początek potrzebne będą

  • konwersja dużych liter na małe
  • znaków akcentowanych, ogonkowanych itd do podstawowych ascii.
  • eliminacja wpisanych spacji, podkreśleń, ogólnie wszystkich poza małymi literami i cyframi
    Reguły mają być zastosowane w podanej kolejności.
    Może ktoś podać gotowy przykład?

(Fizyda) #2

To jest w ogóle możliwe od strony technicznej?


(ziggurad) #3

Ja dobrze rozumiem, chcesz z Htaccess zrobić wyszukiwarkę? :smiley:


(Fizyda) #4

Chyba bardziej konwerter wpisanego hasła na url który może będzie rozwiązany przez rewrite, a jak nie to 404. Przynajmniej ja to tak zrozumiałem.


(Abrimaal) #5

Po kolei jeszcze raz
Ktoś wpisuje w formularzu Żółte DZióbki!?
Skrypt konwertuje tekst po kolei na
Zolte DZiobki!? (do podstawowych liter)
zolte dziobki!? (A-Z do a-z)
zoltedziobki (usuwa znaki spoza 0-9, a-z)

Teraz tekst jest doklejany do adresu domeny
http://example.pl/zoltedziobki
i otwierany (to może być najtrudniejsze) i dlatego tu pytam.

Resztą zajmuje się .htaccess, który zawiera
Redirect /zoltedziobki http://example.pl/photos/yellows/file.ext

Dla pewności robię jeszcze jeden redirect pod ten sam adres dla zoltedziubki, czy nawet dla zultedziupki, ale nie robię kilkudziesięciu przekierowań dla tekstu wpisanego z diakrytykami i bez, dla pisanego od dużych liter, czy całego dużymi literami.

Dla tekstu wpisanego z poważniejszym błędem, np. Zielone Dziubki, ostatni redirect przekieruje na stronę “nic nie znaleziono" lub po prostu na główną.


(Fizyda) #6

Wcześniej chciałeś zrobić

teraz mówisz o skrypcie - i to jest dobre rozwiązanie czyli:

  1. tworzymy index.html ze skryptem nawet w JavaScript
  2. na tej stronie znajduje się formularz do wpisania szukanej frazy
  3. skrypt po wpisaniu i kliknięciu w przycisk konwertuje według podanych przez Ciebie reguł wprowadzoną frazę
  4. skrypt przekierowuje użytkownika na adres składający się z uzyskanej przekonwertowanej frazy

za resztę odpowiada już htaccess i redirecty które masz już utworzone.

Mała uwaga: takie rozwiązanie nie jest najlepszym - najwygodniejszym. Przy dużej liczbie fraz które chcesz obsługiwać będziesz miał bardzo długą listę redirectów, a to może wpłynąć negatywnie na działanie serwera WWW i szybkość ładowania stron.

Teraz nasuwa się pytanie, w czym oczekujesz pomocy? Bo początkowo wyglądało że pytasz jak zrobić coś ala wyszukiwarkę w httaccess, a teraz to już sam nie wiem. Swoją drogą to nie będzie wyszukiwarka, a bardziej przekierowywanie użytkownika do pliku przy pomocy jakiegoś hasła/słowa klucza. Z wyszukiwaniem to nie ma nic wspólnego.


(Abrimaal) #7

Nie znam javascript, szukam gotowego rozwiązania lub choćby przykładów takiej konwersji znaków. Naprawdę nie znam .js :disappointed_relieved:

Dlatego za pomocą skryptu chcę zredukować rozmiar pliku .htaccess

Dokładnie tak, jak piszesz. Słowa kluczowe, tagi w podstawowej formie. To dlatego, że przykładowy adres strony wygląda mniej więcej tak

http://abrimaal.pro-e.pl/foto/carsay.php/?sfpg=NDYwMF9jYXJzYXkvMjEyMDBfZnNvLyoqNGJkNzhlMmJjNzdiNmY5NzE4YTQ1MDNmZWJjM2I5NGE

i nie ma w nim miejsca na HTML’owe meta typu keywords czy description

Wcześniej robiłem przekierowania w pełnoekranowej ramce, gdy stron było kilkadziesiąt. Teraz jest ich za dużo, żeby dla każdej robić folder (jako nazwa przekierowania) i plik index.html z tagami i pełnoekranowym IFRAME. Poza tym, adres nie zmieniał się przy przechodzeniu do innej strony, więc odrzuciłem tą metodę.


(Fizyda) #8

Nie liczyłbym na gotowe rozwiązanie bo to o czym do tej pory pisałeś jest trochę dziwne i ciężko będzie znaleźć gotowca, ale zawsze możesz szukać. Jeśli już będziesz miał jakieś przykłady to i tak będziesz musiał wiedzieć jak ich użyć, więc jeśli zupełnie nie znasz js to też nic z tego raczej nie będzie.

To o czym do tej pory pisałeś w żaden sposób nie zredukuje reguł redirect w htaccess.

W takim razie lepiej zająć się zmianami w skrypcie tak by były linki przyjazne użytkownikom.

Dlaczego chciałbyś takie rzeczy umieszcza w ogóle w linku?

Ja już naprawdę pogubiłem się w tym wszystkim. Co Ty chcesz zrobić i po co, a w czym i jak to już w ogóle nie mam pojęcia.


(Abrimaal) #9

Ok, piszę tylko co istotne, bez skoków w bok

Składnię podkradnę z innych plików, przykładów jest wiele, choćby taki
var str = "Hello World!"; var res = str.toLowerCase();
W tym przykładzie zmienna str jest zdefiniowana, tutaj musi być pobrana z okna input

Ten fragment ma pobierać tekst z okna
html: <input name="searchTxt" type="text" maxlength="128" id="searchTxt" class="searchField"/>
js: document.getElementById("searchTxt").value;

Zanim zastosuję reguły, muszę mieć pewność, że string z okna został zdefiniowany jako zmienna tekstowa.
Czy automatycznie zostanie utworzona zmienna searchTxt, czy konieczne jest zdefiniowanie
var nazwa = ? (i tu stoję)


(Fizyda) #10

Aby pobrać tekst z inputa którego przykład dałeś i zapamiętać w zmiennej w celu dalszej zmiany (bez modyfikacji w samym inpucie) robisz tak:

var str = document.getElementById("searchTxt").value;

dalej możesz zrobić np:

str = str.toLowerCase();

aby zmienić tekst w zmiennej str na same małe znaki.


(Abrimaal) #11

Czyli cały czas operuję na jednej zmiennej, zamiast tworzyć tymczasowe str1, str2 po zastosowaniu kolejnych modyfikacji.

str = "http://example.pl/" + str;

Jeśli to jest dobrze, to finalnie trzeba będzie wywołać ten adres.
Domyślam się, że skrypt ma zostać wywołany pomiędzy kliknięciem na przycisk w formularzu (lub Enter), a przejściem przeglądarki pod adres.
Skrypt js zmodyfikuje zmienną, ale nie adres. Czyli musi być on przekazany do pliku html?


(Fizyda) #12

Nie, możesz mieć np formularz którego nie wysyłasz na serwer, który nie ma action ani method:

<form id="search" action="" method="">
	<input id="key-word" type="text" name="key-word">
	<submit id="submit">OK</submit>
</form>

Teraz dodajesz skrypt JS który zawiera:

  1. obsługę zdarzenia zatwierdzenia formularza które nazywa się onSubmit
  2. wykonuje konwersję wprowadzonej frazy w inputa z ID key-word w ramach obsługi wydarzenia
  3. przekierowuje użytkownika na zbudowany adres i blokuje wysłanie formularza

Wiesz już mniej więcej jak zrobić konwersję według własnych zasad, musisz teraz znaleźć jak obsłużyć zdarzenie zatwierdzania formularza oraz jak przekierować użytkownika na inny adres za pomocą JS. Wydaje mi się że nie będziesz musiał blokować wysyłania formularza, ale w razie problemów, że zamiast przejścia na inną stronę przeładowuje Ci się formularz wprowadzania tekstu to będzie to właśnie problemem i będziesz musiał dodać.


(Abrimaal) #13

Dzięki. Zanim podejmę się tak skomplikowanej operacji, przydałoby się sprawdzić działanie, aby skrypt wyświetlił wynik jako tekst na ekranie. Jest jakaś prosta instrukcja?


(Fizyda) #14
alert(zmienna);

albo console.log(zmienna); ale musisz umieć włączyć konsolę w przeglądarce i ogólnie mieć pojęcie o istnieniu narzędzi developerskich w przeglądarce.


(Abrimaal) #15

Mniej więcej działa, teraz tylko dopracuję detale, bo jednak nie wszystko chodzi jak powinno.

<input id="key-word" type="text" name="key-word" value=""/>
<input id="sookbtn" type="button" value="click" Onclick="sook()" Onsubmit="sook()"/>

<script language="javascript" type="text/javascript">
function sook()
{var str1
str1 = document.getElementById('key-word').value;
str1 = str1.toLowerCase();        //zamienia na małe litery
str1 = str1.replace(/\s/g, '');   //usuwa spacje
str.normalize();  //ma konwertować UTF-8 do podstawowych, ale coś mu nie idzie
window.open("http://adres.pl/" + str1, "_top",);
}
i do tego, żeby Enter uruchamiał skrypt document.getElementById("key-word").addEventListener("keyup", function (event) { if (event.keyCode==13) { document.getElementById("sookbtn").click(); } });