Próbować dostać
www.example.com
przejść bezpośrednio do
www.example.com/store
Próbowałem wielu bitów kodu i nic nie działa.
Co próbowałem:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(.+)\www.example\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]
Co ja robię źle?
.htaccess
mod-rewrite
redirect
Willi Mentzel
źródło
źródło
Byłem zaskoczony, że nikt o tym nie wspominał:
Zasadniczo przekierowuje katalog główny i tylko adres URL katalogu głównego. Odpowiedź pochodzi z tego linku
źródło
RedirectMatch 301 ^/$ /store/
Spróbuj tego:
Jeśli chcesz, aby zewnętrzne przekierowanie (które powoduje, że przeglądarka wyświetlała przekierowany adres URL), ustaw
R
tam również flagę:źródło
www.example.com
po przekierowaniu będzie on wyświetlany jako identyfikator URI? Jeśli nie, to jak by to zmienić?RewriteCond
pierwszą i pierwsząRewriteRule
?/aboveSubDir
przez przeglądarkę lub serwer.Oto, co zwykłem przekierowywać do podkatalogu. To zrobiło to niewidocznie i nadal pozwala na żądania pasujące do istniejącego pliku lub cokolwiek innego.
Zmień site.com i podkatalog ze swoimi wartościami.
źródło
Aby ustawić niewidoczne przekierowanie z katalogu głównego do podfolderu, możesz użyć następującej reguły RewriteRule w katalogu /root/.htaccess:
Powyższa reguła wewnętrznie przekieruje przeglądarkę z:
do
I
do
podczas gdy przeglądarka pozostanie w folderze głównym.
źródło
Inna alternatywa, jeśli chcesz przepisać adres URL i ukryć oryginalny adres URL:
Dzięki temu, jeśli na przykład wpiszesz
http://www.example.com/product.php?id=4
, przejrzyście otworzy plik w,http://www.example.com/store/product.php?id=4
ale bez pokazywania użytkownikowi pełnego adresu URL.źródło
QSA
(dołącz ciąg zapytania) do[L]
([L, QSA]
), jeśli chcesz, aby ciągi zapytania zostały przeniesione do przepisanego adresu URL.To wydawało się najprostszym rozwiązaniem:
Dostawałem pętle przekierowań z niektórymi innymi rozwiązaniami.
źródło
Nie rozumiem twojego pytania ...
Jeśli chcesz przekierować każde żądanie do podfolderu:
Jeśli chcesz przekierować do podfolderu, który ma nazwę domeny
źródło
([^\.]+\.[^\.]+)$
aby zarezerwować domenę jako nazwę podfolderu.Odkryłem, że w celu uniknięcia cyklicznego przekierowywania ważne jest ograniczenie zakresu przekierowania do katalogu głównego. Użyłbym:
źródło
Większość powyższych rozwiązań jest poprawna, ale wszystkie brakuje przejrzystości przekierowania.
W moim przypadku odwiedzając witrynę www.example.com , chciałem zostać przekierowany do podkatalogu / sklepu ale bez aktualizacji adresu URL do www.example.com/store . (chcę tylko uzyskać kod strony z tego katalogu). W takim przypadku poniższe rozwiązanie działa idealnie.
źródło: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory
źródło
RewriteRule ^(.*)$ http://otherpage.com/subfolder/$1 [L]
ale aktualizuje on adres URLexample
istore
.example.com
iotherpage.com
domeny. Kiedy odwiedzamexample.com
, chcę, aby treśćotherpage.com/subfolder
była wyświetlana, bez aktualizacji adresu URLW tym celu można również użyć Przekierowania
Lub Alias do mapowania
Edycja: mod_alias ma zastosowanie tylko w httpd.conf.
Refrences
źródło
Poprzednio korzystam z następującego kodu, który działa poprawnie, aby przekierować główny adres URL każdej z moich domen / subdomen do ich podkatalogów korespondencyjnych, które są nazwane dokładnie jako sub / domena, którą samodzielnie:
Jednak gdy chcę dodać kolejne subskrypcje lub domeny, trzeba będzie dodać je w powyższym kodzie. O wiele wygodniej jest uprościć go, aby działał jak symbol wieloznaczny (*), jak poniżej:
Tak więc za każdym razem, gdy dodawane są inne subdomeny / domeny, o ile nazwa subdomeny ma prefiks sub (np. Sub3.domain1.com, sub1.domain3.com itd.), Kod pozostanie ważny.
źródło
Myślę, że główne problemy z opublikowanym kodem to:
pierwsza linia pasuje do hosta zaczynającego się od ściśle sample.com, więc www.sample.com nie pasuje.
druga linia wymaga co najmniej jednego znaku, po którym następuje www.sample.com, który również nie pasuje (dlaczego uniknąłeś pierwszego w?)
żadna z zawartych reguł nie przekierowuje do adresu URL określonego w celu (plus, próbka jest zapisana jako próbka, ale to nie ma znaczenia).
Dla odniesienia, oto kod, który obecnie posiadasz:
źródło
Trochę google, daje mi te wyniki:
Lub spróbuj tego:
Nie zrobiłem wiele przekierowań w pliku .htaccess, więc nie jestem pewien, czy to zadziała.
źródło
Istnieją dwa sposoby na rozwiązanie tego problemu: 1. Utwórz
.htaccess
plik w folderze głównym jak poniżej (wystarczy zastąpić example.com i mój_katalog odpowiednimi wartościami):Użyj narzędzia RedirectMatch, aby przekierować tylko główny adres URL „/” do innego folderu lub adresu URL,
RedirectMatch ^ / $ http://www.example.com/my_dir
źródło
spróbuj użyć poniżej linii w htaccess
Uwaga: może być konieczne sprawdzenie, jaka jest nazwa pliku default.html
default.html to plik ładowany domyślnie w folderze głównym.
RewriteEngine
Redirect /default.html http://example.com/store/
źródło
po prostu dodajesz ten kod do pliku .htaccess
źródło
Odpowiem na pierwotne pytanie, nie wskazując innej możliwej składni (istnieje wiele innych odpowiedzi), ale wskazując coś, z czym kiedyś miałem do czynienia, zajęło mi to trochę czasu, aby wymyślić:
Istnieje możliwość, że% {HTTP_HOST} nie jest wypełniany poprawnie lub wcale. Chociaż widziałem, że występuje to tylko na jednej maszynie na wspólnym hoście, z jakimś niestandardowym łatanym apache 2.2, jest to jednak możliwe.
źródło
Spowoduje to wypróbowanie podkatalogu, jeśli plik nie istnieje w katalogu głównym. Potrzebowałem tego, ponieważ przeniosłem podstawową stronę .html, która oczekuje na uruchomienie na poziomie roota i wypchnąłem ją do podkatalogu. Działa tylko wtedy, gdy wszystkie pliki są płaskie (brak możliwości .htaccess w podkatalogu możliwe). Przydatne w przypadku powiązanych rzeczy, takich jak pliki css i js.
źródło