Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [htaccess] Ładne adresy
Forum PHP.pl > Forum > Serwery WWW
pitbull82
Witam

Mam zrobione coś takiego:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?url=$1

Działa to tak, że adres postaci: http://localhost/cos zamieni na http://localhost/index.php?url=cos.

Rzecz w tym, że gdy wpiszę:

http://localhost/cos/ (slash na końcu), to jest problem - co prawda index.php się wyświetla, ale nie wyświetla już styli i jest sporo warningów.
(a chciałbym, żeby było tak jak przed momentem)

To samo gdy wpiszę więcej "katalogów", czyli np:
http://localhost/cos/cos2

(chciałbym, żeby wyświetlił się normalnie index.php a url miał wartość 'cos/cos2')

Czy ktoś z Was wie, jak to napisać?
bregovic
Osobiście uważam że najlepszy sposób to poprowadzenie wszystkich wywołań do pliku index.php i bezpośrednio w php dzielenie url'a na zmienne... mod_rewrite jest cudowny, ale strasznie imo popaprany. W php łatwiej.
bendi
No a co sie dziwisz ze nie wyswietla Ci styli i obrazkow skoro kazde zapytanie http przesuwasz na swoj index.php. Trzeba zablokowac przesylanie tych rzeczy. Ja to robie tak:
Kod
RewriteCond %{REQUEST_URI} !((\.[a-zA-Z0-9]{2,4}$)|port|sklep|bendi|resources|old|projekty|ukd|(\.txt|\.php|\.html)$)

RewriteRule ([a-z_0-9A-Z]+)/?([a-z_0-9A-Z]+)?/? application.php

A mod_rewrite wcale nie jest poparany tylko trzeba sie wyrazen regularnych nauczyc tongue.gif
krysk
Podepnę się - mam podobny problem.

Mój .htaccess:
Kod
RewriteEngine on
RewriteRule ^templates/(.*) /home/degustator/public_html/templates/$1 [l]
RewriteRule ^.*$ /home/degustator/public_html/index.php


I co tutaj jest nie tak? Mam taki sam problem jak pitbull82 - dopóki w adresie nie ma dodatkowych / to wszystko działa jak należy.
bendi
Aha czyli jednak moja poprzednia diagnoza byla bledna. Blad wynika z tego przypuszczalnie ze sciezki do obrazkow styli i calego innego badziewia sa podane relatywnie, a jezeli dodamy ukosnik na koncu adresu to przegladarka traktuje to jako fizyczny katalog na serwerze i stara sie pobrac te elementy z niego. Niestety takiego katalogu nie ma wiec sie wszystko kaszani.
Katalogi moga wygaldac tak:
Kod
/
/index.php
/resrources/style/
/resources/style/style.css
/resources/scripts/script.js
/resources/img/

No i teraz wstawiamy w pliku index.php sciezke do obrazka
Kod
<img src="resources/img/obrazek.gif" />

no i mamy taka sciezke wyowalnia
Kod
http://localhost/index.php

Wtedy wszytko jest cacy, bo przegladarka pobiera wszystko z podkatalgu resources/img/ i git, jednakze jezeli zmienimy adres na:
Kod
http://localhost/kontakt/

Wtedy szukanie naszego obrazka odbywa sie w katalogu /kontakt/resources/img/ ktorego oczywiscie nie ma no i jest straszna kaszana.

Rozwiazanie
Rozwiazanie problemu polega na wstawianiu bezwzglednych sciezek do orbazkow zeby sie uchronic przed wzglednym poszukiwaniem plikow przez przegladarke, mozna to osiagnac na pare sposobow ten z ktorego ostatnio korzystam wygalda tak:
  1. <?php
  2. //ustawiamy nasza sciezke
  3. define( 'SITE_PATH_HTTP', '/' );
  4.  
  5. //wyswietlamy obrazek
  6. echo '<img src=\"' . SITE_PATH_HTTP. 'resources/img/obrazek.gif\" />';
  7. ?>
  8. <!-- mozna tez wstawiac sciezke w bezposrednio w source -->
  9. <img src=\"<?php echo SITE_PATH_HTTP;?>resources/img/obrazek.gif\" />

Rozwiazanie moze malo eleganckie ale skuteczne a o to przeciez chodzi.

Jezeli ktos korzysta ze smartow to ma jeszcze latwiej o PRADO juz nie mowiac. W obydwu przypadkach mozna porobic swoje znaczniki a ich obsluga zajac sie w kodzie, dzieki czemu w szablonach nie ma zadnej informacji o zmianie sciezek. No ale to juz zupelnie inna historia winksmiley.jpg)
krysk
Jeśli ma się własną domenę można też odwoływać się w ten sposób:
Kod
<img src="/templates/base/gfx/button_vote_off.gif">
Sl0wik
Ja rowniez uzywam zapisu
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) go.php?link=$1
z tym ze mam inny klopot. W folderze /admin/ znajduje sie panel administracyjn ktory nie jest obslugiwany przez go.php.
Jest mozliwosc pominiecia folderu admin?
krysk
Kod
RewriteRule ^admin/(.*)$ /home/HOME_DIR/public_html/admin/$1 [l]



Powinno działać ;-)
Sl0wik
Niestety nie dziala.
Moze idzie to rozwiazac opierdajac sie na nazwie subdowmeny ? Bo moge umiescic panel jako admin.domen.com
M@k
Witam!
Mam taki problem
Otórz serwer tworzy subdomeny w takim schemacie:
www.sub.domena.pl = www.domena.pl/sub/

a ja muszę przekierować subdomenę na katalog główny, wraz z zachowaniem phpowskiego $SERWER_NAME.
Możlwość re-konfiguracji DNSa jest niemożliwa. Wiem ze mozna to jakos zrobic w pliku .htaccess: ale niestety nie wiem jak.

Może być na konkretny plik w katalogu głównym.

Serdecznie prosze o pomoc i dziekuje.
Strus
RedirectMatch permanent ^z$ na
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.