Czy można użyć .htaccess do przepisania subdomeny do katalogu?
Przykład:
pokazuje zawartość
Czy można użyć .htaccess do przepisania subdomeny do katalogu?
Przykład:
pokazuje zawartość
Odpowiedzi:
Spróbuj umieścić to w swoim pliku .htaccess:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]
Aby uzyskać bardziej ogólną regułę (która działa z każdą subdomeną, a nie tylko sub
), zamień ostatnie dwie linie na następującą:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]
http://test.domain.com/subdomains/test/
, kiedy chcę, żeby tylko się wyświetlałohttp://test.domain.com/
test.domain.com/subdomains/test
- może dzieje się coś innego. Czy możesz dodać RewriteBase /
zaraz potem RewriteEngine on
? Ponadto, jeśli chcesz, aby był wyświetlany test.domain.com
, będziesz musiał użyć mod_proxy i [P]
flagi.
Nie jestem ekspertem od mod_rewrite, często się z tym zmagam, ale zrobiłem to na jednej z moich witryn, może potrzebować innych flag itp. W zależności od okoliczności. Używam tego:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L]
Wszelkie inne reguły przepisywania dla reszty witryny muszą zostać wprowadzone później, aby zapobiec zakłócaniu przepisywania subdomeny.
.htaccess
wejdzie na tę stronę (tak jak ja), oprócz stworzenia właściwego .htaccess
pliku, aby był on skuteczny, musisz ustawić AllowOverride
w swoich VirtualHost
ustawieniach ( stackoverflow.com/a/22819550/1657502 ) , włącz rewrite
moduł Apache, a następnie zrestartuj Apache ( stackoverflow.com/a/5758551/1657502 )
www.
prefiks jest prawdopodobnie najlepiej obsługiwany przez przekierowanie niż przepisanie.
Możesz użyć następującej reguły w .htaccess, aby przepisać subdomenę do podfolderu:
RewriteEngine On
# If the host is "sub.domain.com"
RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
# Then rewrite any request to /folder
RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]
Wyjaśnienie wiersz po wierszu:
RewriteEngine on
Powyższa linia informuje serwer, aby włączył silnik przepisywania adresów URL.
RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
Ten wiersz jest warunkiem dla RewriteRule, w którym dopasowujemy do hosta HTTP przy użyciu wzorca wyrażenia regularnego. Warunek mówi, że jeśli host to sub.domain.com, wykonaj regułę.
RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]
Reguła pasuje do http://sub.domain.com/foo i wewnętrznie przekierowuje ją na http://sub.domain.com/folder/foo .
Zastąp sub.domain.com nazwą subdomeny, a folder nazwą folderu, do którego chcesz skierować swoją subdomenę.
Miałem ten sam problem i znalazłem szczegółowe wyjaśnienie w http://www.webmasterworld.com/apache/3163397.htm
Moje rozwiązanie (zawartość poddomen powinna znajdować się w folderze o nazwie sd_subdomain
:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]
To przekierowuje do tego samego folderu do subdomeny:
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1
Spróbuj umieścić ten plik .htaccess w folderze subdomeny:
RewriteEngine On
RewriteRule ^(.*)?$ ./subdomains/sub/$1
Przekierowuje do http://domain.com/subdomains/sub/ , gdy chcesz, aby pokazywała tylko http://sub.domain.com/
Przekierowanie katalogu subdomeny:
RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]
W przypadku każdego żądania subdomeny użyj tego:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+)
RewriteRule ^(.*)$ /%1/$1 [L]
Po prostu utwórz folder taki sam jak nazwa domeny podrzędnej, której potrzebujesz. Folder musi istnieć w następujący sposób: domena.com/sub dla sub.domain.com .
http://test.domain.com
, adres URL przekieruje mnie dohttp://test.domain.com/subdomains/test/
. Czy to możliwe bez pokazywania/subdomains/test/
na końcu?