2010-05-04 10 views
12

Wypróbowałem sugestie pod this question, ale one nie działają lub dają mi nieskończony błąd pętli przekierowania.Użyj Mod_Rewrite do przepisania ROOT na inną ścieżkę

Mam następujących w moim pliku .htaccess:

<IfModule mod_rewrite.c> 

    Options +FollowSymLinks 
    RewriteEngine On 
    RewriteBase/

    # Rewrite old links to new 
    Redirect 301 /howitworks.php  /how-it-works 
    Redirect 301 /testimonials.php  /testimonials 
    Redirect 301 /contact_us.php  /customer-service 
    Redirect 301 /affiliates.php  /affiliates 
    Redirect 301 /account.php   /customer/account 
    Redirect 301 /shopping_cart.php  /checkout/cart 
    Redirect 301 /products.php   /starter-kits 
    Redirect 301 /login.php    /customer/account/login 

    # Force to Admin if trying to access admin 
    RewriteCond %{HTTP_HOST} www\.example\.com [NC] 
    RewriteCond %{REQUEST_URI} admin [NC] 
    RewriteRule ^(.*)$ https://admin.example.com/index.php/admin [R=301,L,QSA] 

    # Compress, Combine and Cache Javascript/CSS 
    RewriteRule ^(index.php/)?minify/([^/]+)(/.*.(js|css))$ lib/minify/m.php?f=$3&d=$2 

    # Always send 404 on missing files in these folders 
    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/ 

    # Never rewrite for existing files, directories and links 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-l 
    RewriteCond %{REQUEST_URI} !server-status 

    # Rewrite everything else to index.php 
    RewriteRule .* index.php [L] 

    # Force www in url and non-example domains to example 
    RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] 
    RewriteCond %{HTTP_HOST} !^ww2\.example\.com [NC] 
    RewriteCond %{HTTP_HOST} !^qa\.example\.com [NC] 
    RewriteCond %{HTTP_HOST} !^uat\.example\.com [NC] 
    RewriteCond %{HTTP_HOST} !^local\.example\.com [NC] 
    RewriteCond %{HTTP_HOST} !^admin\.example\.com [NC] 
    RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L,QSA] 

</IfModule> 

muszę przepisać który będzie wykonać następujące czynności:

Rewrite: http://subdomain.example.com/dohttp://subdomain.example.com/page

Chciałbym również to by ukryć/stronę (/ zachowywałoby się tak, jakby to była strona/strona), ale nie jest to konieczne. Ponadto chciałbym, aby działał z protokołem HTTP lub HTTPS.

Każda pomoc jest bardzo doceniana, ponieważ zmagałem się z tym przez wiele godzin.

+1

Pytanie to sprawdza się w ServerFault. – leek

Odpowiedz

20

Poprawne przekierowanie toru głównego jest prosta:

RewriteEngine On 
RewriteRule ^/$ /page [R] 

zmusić to tylko na jednej subdomeny (które powinny ledwo zdarzyć, jeśli blok przepisać to w definicji virtualhost):

RewriteEngine on 
RewriteCond %{HTTP_HOST} =subdomain.example.com 
RewriteRule ^/$ /page [R] 
+5

Ta odpowiedź po prostu nie działa w kontekście htaccess i wykonuje pełne przekierowanie do klienta (IOW nie "ukrywa się", jak pytano) – covener

+4

To działało tylko dla mnie na apache2, gdy użyłem ^/$ zamiast^$. Czy odpowiedź jest błędna, czy też popełniam błąd? –

+0

Wrong: RewriteRule^$/page [R] Right: RewriteRule ^/$/page [R] – Hartmut

5

Kopiowanie mój usuniętą odpowiedź:

w htaccess swojej DocumentRoot prosto:

RewriteEngine on 
RewriteCond %{HTTP_HOST} =subdomain.example.com 
RewriteRule ^$ /page 
+1

Nie wiem, dlaczego to zostało usunięte ... 'RewriteRule^$/page' wydaje się być jedyną poprawną odpowiedzią. 'RewriteRule ^/$/page' ma _NOT_ pasuje do żądania do głównego katalogu dokumentu w witrynie.Modyfikuję obecnie zaakceptowaną odpowiedź, aby była poprawna. – joshperry