Skocz do zawartości

Zdjęcie
- - - - -

Przyjazne linki w .htaccess

htaccess

Najlepsza odpowiedź unbreak, 26 lutego 2015 - 12:43

Poprawiłem:

RewriteRule ^([^/-]+)/?(([^-/]+))?/?$  index.php?m=$1&id=$3 [L]
A do tego jeszcze jeżeli id może być tylko liczbą to lepiej będzie takie coś dać:
RewriteRule ^([^/-]+)/?((\d+))?/?$  index.php?m=$1&id=$3 [L]
Przejdź do postu


11 odpowiedzi w tym temacie
  • Zaloguj się, aby dodać odpowiedź
JJay

    Stary wyjadacz

  • 199 postów
    • Czas spędzony online: 5d 9h 38m 21s
19
Dobra
  • LocationCieszyn > Łódź

Napisano 25 lutego 2015 - 19:26

#1

Witam.
Wszystko wczoraj działało ok, dzisiaj wywala błąd jeśli nie dodam drugiego parametru.
 

RewriteRule ^([^-]+)/([^-]+)$ ./index.php?m=$1&id=$2

Działa dobrze jeśli link jest w formie domena.pl/parametr1/parametr2/ , a chcę żeby działało także domena.pl/parametr1/ .
Proszę was o pomoc :)


  • 0

writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 25 lutego 2015 - 19:41

#2

Po prostu dodaj kolejną regułę do pliku .htaccess.


  • 1

logo-green-dark.png


JJay

    Stary wyjadacz

  • 199 postów
    • Czas spędzony online: 5d 9h 38m 21s
19
Dobra
  • LocationCieszyn > Łódź

Napisano 25 lutego 2015 - 19:47

#3

Jak dodam nie chce mi poprawnie ładować plików css.
 

Resource interpreted as Stylesheet but transferred with MIME type text/html

  • 0

writen

    Stary wyjadacz

  • 458 postów
    • Czas spędzony online: 29d 22h 59m 44s
133
Znakomita!

Napisano 25 lutego 2015 - 20:03

#4

Jeśli przed regułą dasz warunek podobny do tego

RewriteCond %{REQUEST_URI} !^(index\.php|robots\.txt|style\.css) [NC]

to wymienione w nim pliki i foldery nie będą brane pod uwagę przy zmianie linka. Bo w tej chwili po prostu link twojastrona.pl/style.css zamienia się na twojastrona.pl/index.php?m=style.css i dlatego nie czyta tego pliku.


  • 1

logo-green-dark.png


Michał

    Stary wyjadacz

  • 301 postów
    • Czas spędzony online: 16d 7h 11m 3s
95
Znakomita!

Napisano 25 lutego 2015 - 20:07

#5

Podaj cały kod (albo przynajmniej część od mod_rewrite), bo nie wiadomo, co masz wcześniej.
 

Jak dodam nie chce mi poprawnie ładować plików css.
 

Resource interpreted as Stylesheet but transferred with MIME type text/html

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

ten kod oczywiście zadziała, ale zależy przed czym go wstawisz, dlatego no- pokaż kod :)


  • 1

JJay

    Stary wyjadacz

  • 199 postów
    • Czas spędzony online: 5d 9h 38m 21s
19
Dobra
  • LocationCieszyn > Łódź

Napisano 25 lutego 2015 - 21:06

#6
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^([^-]+)/([^-]+)$ ./index.php?m=$1&id=$2

  • 0

Michał

    Stary wyjadacz

  • 301 postów
    • Czas spędzony online: 16d 7h 11m 3s
95
Znakomita!

Napisano 25 lutego 2015 - 23:11

#7

Ok, to zrób tak jak ci @writen podpowiedział- dodaj drugą regułę, i wstaw do wcześniejszej flagę Last: :D

RewriteEngine On


RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f


RewriteRule ^([^-]+)$ ./index.php?m=$1 [L]
RewriteRule ^([^-]+)/([^-]+)$ ./index.php?m=$1&id=$2

A tak w ogóle czemu nie stworzysz jednego pliku index.php który będzie wywoływany za każdym zapytaniem do strony i w nim w kilku linijkach zrobisz cały router (mi zajęło to 7 linijek :D bez żadnych FW ).
Wtedy twój .htaccess będzie wyglądał mniej więcej tak:
 

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

  • 2

JJay

    Stary wyjadacz

  • 199 postów
    • Czas spędzony online: 5d 9h 38m 21s
19
Dobra
  • LocationCieszyn > Łódź

Napisano 26 lutego 2015 - 10:09

#8

Po wstawieniu 

RewriteEngine On


RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f


RewriteRule ^([^-]+)$ ./index.php?m=$1 [L]
RewriteRule ^([^-]+)/([^-]+)$ ./index.php?m=$1&id=$2

Pliki *.css i *.js traktuje jako strony a nie jako pliki :/
Mam zrobione coś w tym stylu:

<?php
require_once('folder/header.php');
?>
<div class="container">
<?php require_once('folder2/'.$_GET['m'].'.php'); ?>
</div>
<?php
require_once('folder/footer.php');
?>


  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 26 lutego 2015 - 10:34

#9

Ludu, ach ludu :P

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(css|png|jpg|gif|js)$
RewriteRule ^([^-]+)(/([^-]+))?$  index.php?m=$1&id=$3 [L]

Możliwe że źle policzyłem i id nie jest $3 a nawet $4 sprawdź to :)

 

+ Choć lepiej  jest przekierować wszystko do index.php i tam sobie regexować odpowiednio ścieżki :)


Użytkownik unbreak edytował ten post 26 lutego 2015 - 10:36

  • 2

webDeveloper


JJay

    Stary wyjadacz

  • 199 postów
    • Czas spędzony online: 5d 9h 38m 21s
19
Dobra
  • LocationCieszyn > Łódź

Napisano 26 lutego 2015 - 10:40

#10

Css'y działają, strony też, tylko ten drugi parametr nie działa. Próbowałem $2, $3, $4 i nie chce wczytać mi tego id.


  • 0

unbreak

    WT Elite

  • 1 937 postów
    • Czas spędzony online: 27d 8h 43m 36s
506
Znakomita!
  • Location/home/unbreak

Napisano 26 lutego 2015 - 12:43   Najlepsza odpowiedź

#11
Poprawiłem:
RewriteRule ^([^/-]+)/?(([^-/]+))?/?$  index.php?m=$1&id=$3 [L]
A do tego jeszcze jeżeli id może być tylko liczbą to lepiej będzie takie coś dać:
RewriteRule ^([^/-]+)/?((\d+))?/?$  index.php?m=$1&id=$3 [L]

Użytkownik unbreak edytował ten post 26 lutego 2015 - 12:46

  • 3

webDeveloper


JJay

    Stary wyjadacz

  • 199 postów
    • Czas spędzony online: 5d 9h 38m 21s
19
Dobra
  • LocationCieszyn > Łódź

Napisano 26 lutego 2015 - 13:07

#12

Dzięki wielkie ! :)


  • 0





Podone tematy Collapse


Również z jednym lub większą ilością słów kluczowych: htaccess

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych