2013-08-18 16 views
6

Pożądany wynik:.htaccess przepisać: subdomeny jak GET var i ścieżki GET var

http://example.com/     -> index.php 
http://www.example.com/    -> index.php 
http://hello.example.com/   -> index.php?subdomain=hello 
http://whatever.example.com/  -> index.php?subdomain=whatever 
http://example.com/world   -> index.php?path=world 
http://example.com/world/test  -> index.php?path=world/test 
http://hello.example.com/world/test -> index.php?subdomain=hello&path=world/test 

Z .htaccess mam teraz, mogę osiągnąć jedną lub drugą ponownego mapowania, ale nie oba na o tym samym czasie.

RewriteEngine On 

# Parse the subdomain as a variable we can access in PHP, and 
# run the main index.php script 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{HTTP_HOST}  !^www 
RewriteCond %{HTTP_HOST}   ^([^\.]+)\.([^\.]+)\.([^\.]+)$ 
RewriteRule ^.*$ index.php?subdomain=%1 

# Map all requests to the 'path' get variable in index.php 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?path=$1 [L] 

Ciężko mi jest połączyć te dwa ... jakieś wskazówki, proszę?

EDIT
Niepożądane zachowanie mam przeżywa teraz jest to, że jeśli mam subdomenę i ścieżkę po .com/tylko subdomeny będą przepuszczane, a mianowicie:

http://hello.example.com/world-> index.php?subdomain=hello 
+0

http://stackoverflow.com/questions/25582265/mod-rewrite-setting-subdomain-and-directory-to-get-variable – shaunw

+0

może lepiej, jeśli połączysz VirtualHosts do obsługi subdomen i .htaccess do obsługi adresu URL przepisać. Dwa lata później, jak rozwiązać ten problem? –

Odpowiedz

7

Użyj pierwsza zasada, aby dodać parametr subdomain, bez zmiany URI, a następnie użyć 2nd regułę trasie URI do index.php:

RewriteEngine On 

# Parse the subdomain as a variable we can access in PHP, and 
# run the main index.php script 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{HTTP_HOST}  !^www 
RewriteCond %{HTTP_HOST}   ^([^\.]+)\.([^\.]+)\.([^\.]+)$ 
RewriteRule ^(.*)$ /$1?subdomain=%1 

# Map all requests to the 'path' get variable in index.php 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?path=$1 [L,QSA] 

druga reguła potrzebuje, aby mieć flagę QSA, w przeciwnym razie łańcuch zapytania pierwszej reguły zostanie utracony.

+0

Ah, "zapytanie łańcuchowe dołącz", interesujące! Bardzo pouczające, dzięki. –

+0

Cześć Jon Lin, jak przepisać jak http://admin.example.com/ -> http://example.com/admin/ – SKG

+0

Powyższy kod wydaje się nie działać dla ostatniego przykładu OP (http: // hello.example.com/world/test). Powtarza drugi segment (/ test) dwa razy w "path =" var jako "/ world/test/test". – shaunw

Powiązane problemy