Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Konstrukcja .htaccess
Forum PHP.pl > Forum > PHP > Frameworki
gazelek
Kod
RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|gif|jpg|png|css|xml)$ index.php


Witam!
Powyzej kod pliku .htaccess z katalogu public_html. Wszystko dziala poprawnie. Pojawia sie jednak temat: uzywanie subdomen. Kazda subdomena ma swoj osobny katalog w public_html. I teraz - jak zrobic, co dopisac do pliku .htaccess, zeby dla domeny http://example.com obslugiwane byly adresy http://sklep.example.com, a takze http://example.com/sklep? .htaccess bede edytowal recznie, wiec nie musi byc zadnego dodawania z automatu tych subdomen do .htaccess.

Edit: moze troszke jasniej. Potrzebuje ulozyc taka regule, ponizej slowny opis:

Jesli rozszerzenie jest rozne od js,ico,gif,jpg,png,scc lub xml (tutaj pierwsza czesc wyglada tak: !\.(js|ico|gif|jpg|png|css|xml)$), ORAZ w nazwie nie ma wyrazen subdomena1,subdomena2 to przekieruj do pliku index.php

I takie wyrazenie powinno obslugiwac adresy subdomena1.example.com, subdomena2.example.com, a takze strone example.com (odpalona na ZF)
luki100011
Spróbuj w katalogu sklep dodać plik htacess z taką gtreścią

Kod
RewriteEngine off
likemandrake
Kod
[...]
RewriteCond %{HTTP_HOST} !sub1\.domena\.pl$
RewriteCond %{HTTP_HOST} !sub2\.domena\.pl$
RewriteRule [...]


Wywal dyrektywę RewriteBase, gdyż zmniejsza szybkość odpowiedzi serwera na żądanie, a nie widzę, żeby Ci była potrzebna.

Po za tym przykład @luki100011 nie wiem czy jest wydajniejszy czy nie wydajniejszy, w każdym razie widzę dwie zasadnicze wady tego rozwiązania:

o Apache musi przetwarzać dodatkowe pliki .htaccess, a stosowanie plików .htaccess znacznie obniża wydajność serwera, niezależnie od ich zawartości. Efekt ten wzmacnia się gdy używamy mod_rewrite.

o Masz porozrzucane pliki .htaccess po różnych katalogach, czyli każdym musisz zarządzać osobno, a im jest ich więcej, tym trudniej jest nimi zarządzać.
Czadus
A to może ja ze swoim problemem dołączę się:

Kod
RewriteEngine On

RewriteCond %{HTTP_HOST} ^(.*).axte.promatek.pl
RewriteCond %{REQUEST_URI} ^/include [OR]
RewriteCond %{REQUEST_URI} ^/otherFiles [OR]
RewriteCond %{REQUEST_URI} ^/usersFiles [OR]
RewriteRule (.*) http://axte.promatek.pl/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.*).axte.promatek.pl
RewriteRule .* /?stronafirmowa=%1&page=axsxsxfd

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

RewriteRule ^(lang)/([a-z]+)/?$ index.php?page=$1&z1=$2 [L]

RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9.]+)/([a-zA-Z-_0-9]+)/([0-9]+-[0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&z1=$2&z2=$3&powr=$4&$5=1&$6 [L]
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9.]+)/([a-zA-Z-_0-9]+)/([0-9]+-[0-9]+)/?$ index.php?page=$1&z1=$2&z2=$3&powr=$4 [L]
RewriteRule ^(dodaj)/([a-zA-Z-_0-9.]+)/([a-zA-Z-_0-9]+)/([a-zA-Z0-9-.]+)/?$ index.php?page=$1&z1=$2&z2=$3&usunFoto=$4 [L]
RewriteRule ^(dodaj)/([a-zA-Z-_0-9.]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&z1=$2&z2=$3 [L]

RewriteCond %{REQUEST_URI} !.gif$ [NC]
RewriteCond %{REQUEST_URI} !.jpg$ [NC]
RewriteCond %{REQUEST_URI} !.jpeg$ [NC]
RewriteCond %{REQUEST_URI} !.png$ [NC]
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9\_]+[0-9][.]*[0-9]*[a-zA-Z-_0-9\_]*)/?$ index.php?page=$1&z1=$2&z2=$3 [L]
RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&z1=$2 [L]
#RewriteRule ^([a-zA-Z-_0-9]+)/$ /index.php?page=$1&$2 [L]
RewriteRule ^([a-zA-Z-_0-9]+)/?$ /index.php?page=$1 [L]


Powyższa definicja pliku htaccess umożliwia nie tylko wykorzystywanie przyjaznych adresów url, ale również subdomen.

Pytanie moje brzmi, dlaczego działają adresy typu:
http://domena.pl/zmienna/
http://firma.domena.pl/

natomiast nie działają poprawnie adresy typu
http://www.domena.pl/zmienna/
http://www.firma.domena.pl/

Co trzeba zmienić, aby każdy rodzaj adresu działał poprawnie??
likemandrake
Tak na wstępie, to wszędzie masz mały błąd... Jeżeli chcesz żeby kropka była traktowana jak kropka a nie dowolny znak, musisz poprzedzić ją znakiem ucieczki, czyli: \.

A jeżeli chcesz zrobić poddomeny, to szturchnij coś takiego:

Kod
RewriteCond %{HTTP_HOST} ([^.]+)\.domena\.pl$
RewriteCond \1 !^www$
RewriteRule ...


Tak mniej więcej działałoby wybieranie nazw domenowych, ale musisz już zweryfikować, czy zadziała to na każdym przypadku użycia.

Pozdrawiam

Dobra, troszkę inaczej niż chciałeś, poprawka do Twojego pytania:

Kod
RewriteCond %{HTTP_HOST} (?:([^.]+)\.)?domena\.pl$
RewriteRule ...
Czadus
Na razie dziękuję, jak tylko sprawdzę, dam znać, czy zadziałało, pozdrawiam :]
PanGuzol
A może bez kombinowania z .htaccess

  1. /* controllers/SubdomenaController.php */
  2.  
  3. <?php
  4. class SubdomenaController extends Zend_Controller_Action
  5. {
  6.    public function indexAction()
  7.    {
  8.        $this->_redirect('http://subdomena.domena.com');
  9.    }
  10. }
  11. ?>
likemandrake
Takie małe ostrzeżenie.

Jeżeli zajmujecie się budową serwisów na poważnie i nie są to serwisy małej skali, liczbę przekierowań w takich serwisach trzeba zmniejszyć do niezbędnego minimum smile.gif Im więcej tych przekierowań, tym po prostu gorzej, a wiemy doskonale, że takie przekierowania są łatwiejszym sposobem rozwiązania danego problemu smile.gif

Pozdrawiam
Czadus
Cytat(likemandrake @ 22.02.2009, 17:00:45 ) *
RewriteCond %{HTTP_HOST} (? sad.gif [^.]+)\.)?domena\.pl$
RewriteRule ...


Niestety coś mi nie działa. Dla mojej strony, plik htaccess zmieniłem na następujący:

Kod
RewriteEngine On
  
  RewriteCond %{HTTP_HOST} (?:([^.]+)\.)?axte\.promatek\.pl$
  RewriteCond %{REQUEST_URI} ^/include [OR]
  RewriteCond %{REQUEST_URI} ^/otherFiles [OR]
  RewriteCond %{REQUEST_URI} ^/usersFiles [OR]
  RewriteRule (.*) http://axte.promatek.pl/$1 [R=301,L]
  
  RewriteCond %{HTTP_HOST} (?:([^.]+)\.)?axte\.promatek\.pl$
  RewriteRule .* /?stronafirmowa=%1&page=axsxsxfd
  
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  
  #dla zmiany jezyka
  RewriteRule ^(lang)/([a-z]+)/?$ index.php?page=$1&z1=$2 [L]
  
  RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9.]+)/([a-zA-Z-_0-9]+)/([0-9]+-[0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&z1=$2&z2=$3&powr=$4&$5=1&$6 [L]
  RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9.]+)/([a-zA-Z-_0-9]+)/([0-9]+-[0-9]+)/?$ index.php?page=$1&z1=$2&z2=$3&powr=$4 [L]
  RewriteRule ^(dodaj)/([a-zA-Z-_0-9.]+)/([a-zA-Z-_0-9]+)/([a-zA-Z0-9-.]+)/?$ index.php?page=$1&z1=$2&z2=$3&usunFoto=$4 [L]
  RewriteRule ^(dodaj)/([a-zA-Z-_0-9.]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&z1=$2&z2=$3 [L]
  
  #bez ponizszej linijki nie dziala styl przy logowaniu do panelu admina
  RewriteCond %{REQUEST_URI} !.gif$ [NC]
  RewriteCond %{REQUEST_URI} !.jpg$ [NC]
  RewriteCond %{REQUEST_URI} !.jpeg$ [NC]
  RewriteCond %{REQUEST_URI} !.png$ [NC]
  RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9\_]+[0-9][.]*[0-9]*[a-zA-Z-_0-9\_]*)/?$ index.php?page=$1&z1=$2&z2=$3 [L]
  RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?page=$1&z1=$2 [L]
  #RewriteRule ^([a-zA-Z-_0-9]+)/$ /index.php?page=$1&$2 [L]
  RewriteRule ^([a-zA-Z-_0-9]+)/?$ /index.php?page=$1 [L]


A efekty można zobaczyć pod adresem
http://axte.promatek.pl/
http://a.axte.promatek.pl/
http://www.axte.promatek.pl/
http://www.a.axte.promatek.pl/

Co w takim razie robię nietak?
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.