2017-11-28 189 views
5

Przechowuję dynamiczną zawartość i statyczną zawartość w różnych subdomenach dla mojej aplikacji internetowej, ale niedawno odkryłem, że jeśli zostanie wywołana bezpośrednio, dynamiczna zawartość może być wyświetlana na mojej statycznej poddomenie (www .) lub w ogóle nie ma poddomeny.Wyklucz konkretną subdomenę lub nie subdomenę w htaccess RewriteRule


URL Struktura:

http(s)://(subdomain).(domain).(tld)/(static page) OR (direct/random hash) OR (secure/random hash) 

Wszystko statyczny jest dostępny za pośrednictwem "www", co skutkuje moich SEO Friendly domen takich jak

http(s)://www.domain1.com/about 
http(s)://www.domain1.com/ 
http(s)://www.domain2.com/about 
http(s)://www.domain2.com/ 

Podczas dynamicznej zawartości oglądane za pośrednictwem aplikacji internetowej byłby dostępny z domeny, takiej jak

http(s)://dynamic1.domain1.com/direct/randomhash 
http(s)://dynamic2.domain1.com/direct/randomhash 
http(s)://dynamic1.domain2.com/direct/randomhash 
http(s)://dynamic2.domain2.com/direct/randomhash 

To jest mój bieżący plik .htaccess

Zasady przepisać dynamiczne linki gdzie URI rozpoczyna się z secure lub direct jak również wszelkich rozszerzeń plików do pliku index.php.

Header set Connection keep-alive 
<IfModule mod_dir.c> 
    DirectorySlash Off 
</IfModule> 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^index.php - [L] 
    RewriteRule ^(secure|direct) /index.php [L] 
    RewriteCond %{REQUEST_URI} !^/server-status 
    RewriteCond %{REQUEST_URI} !^/public/cache 
    RewriteRule !\.(png|gif|css|jpg|zip|js|html|htm|swf|ico|fon|ttf|otf|svg|woff|woff2|eot)$ /index.php [L] 
</IfModule> 

Powyższy obecnie pracuje ale moim problemem jest to, że jeśli użytkownik po prostu zmienia domenę podrzędną od tej stosowanej dla dynamicznych treści WWW będzie nadal działać i spowoduje dynamicznej zawartości są dostępne z moim SEO Friendly poddomena.

Mam nadzieję, że będę w stanie edytować tę regułę RewriteRule ^(secure|direct) /index.php [L], tak aby wykluczyć ją, jeśli istnieje aktywna poddomena www. lub żadna poddomena razem, dopóki działa, jeśli domena lub poddomena jest czymkolwiek innym.

To znaczy subdomena lub domena nadal być wieloznaczny, chyba że subdomena jest www.


Jestem zakładając muszę dodać %{HTTP_HOST} do RewriteRule ^(secure|direct) /index.php [L] i użyć wyrażenia regularnego, aby umożliwić dowolną domenę podrzędną , domain i tld, ale nie jestem pewien, jak wykluczyć, jeśli host http zaczyna się od WWW. lub w ogóle nie ma poddomeny.

Mój cel końcowy polega na tym, że ścieżki secure i direct nie mogą być oglądane za pośrednictwem www. lub poddomeny, ale nadal pracują z dowolną inną subdomeną/domeną.

+0

Czy próbowałeś sprawdzić ''' w' RewriteCond'? – Cole

+1

Podobnie jak sidenote, 'png | gif | css | jpe? G | zip | js | html? | Swf | ico | fon | [ot] tf | svg | woff2? | Eot' działa trochę lepiej niż twoje obecne wyrażenie regularne i pozwala także na 'jpeg'. – ctwheels

+0

Więc '/ secure' i'/direct' powinny być dozwolone tylko z domeny głównej (www i bez www)? – anubhava

Odpowiedz

6

Można użyć:

RewriteCond %{HTTP_HOST} ^(?:www\.)?[^.]+\.[^.]+$ [NC] 
RewriteRule ^(secure|direct) /index.php [L] 
+0

@JeremyJones Tak, ponieważ nie rozumiesz pytania, przekierowuje te zapytania na stronę indeksu, a nie na stronę docelową. – Croises

3

Należy dodać warunek do reguły, która obsługuje „bezpiecznych” i wnioski „direct”, tak, że muszą pochodzić tylko z subdomen dopasować, a nie www jeden.

RewriteCond %{HTTP_HOST} ^dynamic[0-9]+\.[a-z]+ 
RewriteRule ^(secure|direct) /index.php [L] 

ten sposób tylko wnioski, które mają subdomen dopasowania tej reguły dostanie ponownie zapisywane do skryptu PHP. Jeśli użytkownik zmieni subdomenie z powrotem na www lub cokolwiek innego, co nie pasuje do wzorca określonego w warunku, to żądanie nie znajdzie się w skrypcie PHP.

Jeśli Twoje nazwy dla dynamicznych subdomen są naprawdę losowe, po prostu użyj czegoś innego, co wiesz o nich, aby "www" się nie zgadzało, na przykład, jeśli wszystkie mają co najmniej cztery znaki, to wzór zadziała:

RewriteCond %{HTTP_HOST} ^[^.][^.][^.][^.]+\. 
RewriteRule ^(secure|direct) /index.php [L] 

ponieważ ciąg "www." nie pasuje do wzorca zaczynającego się od czterech lub więcej bez kropek, a następnie kropki.