2012-04-28 18 views
11

Pracuję nad dość złożonym projektem, więc chciałbym wybrać strukturę plików/folderów, która ma sens.Uczyń folderze głównym podfolder z .htaccess?

Struktura folderu/pliku chciałbym mieć to:

.htaccess 
/php/ 
/assets/ 

Chciałbym mieć stron internetowych, że ludzie będą mieli dostęp w:

/php/views/pages/ 

Zastanawiam się, czy można użyć tylko .htaccess, aby ustawić /php/views/pages jako "widoczny root", aby na przykład, gdy ludzie odwiedzają http://mydomain.com/ będą oglądać http://mydomain.com/php/views/pages/index.php, a jeśli tak, jak mam to zrobić?

Czy istnieje również możliwość kanonalizacji całego dostępu do /php/views/pages przy użyciu .htaccess i przekierowania 301 w celu zatrzymania wielu łączy indeksowanych w wyszukiwarkach?

+0

Dlaczego nie możesz zmienić dyrektywy 'DocumentRoot'? –

Odpowiedz

24

Jeśli nie masz dostępu do konfiguracji hosta

DocumentRoot może być używany tylko w serwerze i configs hostów wirtualnych .htaccess musi być.

  1. Dodajmy dyrektyw w .htaccess

    RewriteEngine on 
    
  2. Zakładam, że chcesz, aby wnioski do/aktywa przechodzą przez

    #if a match for asset is found, do nothing 
    RewriteRule ^assets/ - [L] 
    
  3. Jeżeli wniosek próbuje uzyskać dostęp /php/views/pages/ bezpośrednio, przekieruj go do jego wersji kanonicznej

    RewriteCond %{THE_REQUEST} php/views/pages/ 
    RewriteRule ^php/views/pages/(.*) http://mydomain.com/$1 [R=301,L] 
    
  4. I dodać regułę do mapowania wszystko inne /php/views/pages/

    RewriteCond %{REQUEST_URI} !php/views/pages/ 
    RewriteRule ^(.*)$ /php/views/pages/$1 [L] 
    

Jeśli masz dostęp do konfiguracji hosta

zapomnieć o plikach .htaccess i wykorzystać go. Przykładowa konfiguracja może wyglądać następująco:

# ~base stands for your original DocumentRoot 
<VirtualHost *:80> 
    DocumentRoot ~base/php/views/pages 
    Alias /assets ~base/assets 

    # other configuration parameters 
</VirtualHost> 
+1

Genialny. Na nagród jest limit czasowy, więc nagrodzę go, gdy się skończy :). Wielkie dzięki za bardzo wyjaśniającą odpowiedź. – Avicinnian

+0

Bardzo dobrze wyjaśnione! –

Powiązane problemy