Skocz do zawartości

Apache, rewrite + nowa domena wraz z poddomenami


SebaZ

Rekomendowane odpowiedzi

Nie bardzo wiedziałem gdzie to umieścić, a dział dotyczący PHP wydał mi się najbardziej pasującym do mojego dosyć zaawansowanego problemu.

Mam 2 stare domeny, które chce w jakiś szybki i sensowny sposób

przekierować na serwerze na nową. Jeśli ktoś wpisze starą to go

przekieruje na nową z zachowanie przedrostka www czy pod domeny

oraz właściwym url.

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(.*\.)?(univ|ug)\.gda\.localhost$ [NC]
RewriteRule ^(.*) %{HTTP_HOST}$1 [C]
RewriteRule ^(.*\.)?(univ|ug)\.gda\.localhost(.*)? 	
https://$1ug.edu.localhost/$3 [L,R=301]

Powyższy kod prawie działa. https://test.univ.gda.localhost/

przekierowuje do https://test.ug.edu.localhost/univgda/ z tym, że

univgda/ jest zbędne i jest fizycznym katalogiem, gdzie jest

zdefiniowany virtualhost w Apachu:

<VirtualHost 127.0.0.1:80>
DocumentRoot D:/xampp/htdocs/ugedu
ServerName ug.edu.localhost
ServerAlias www.ug.edu.localhost
ServerAlias *.ug.edu.localhost
</VirtualHost>

<VirtualHost 127.0.0.1:80>
DocumentRoot D:/xampp/htdocs/univgda
ServerName univ.gda.localhost
ServerAlias www.univ.gda.localhost
ServerAlias *.univ.gda.localhost
</VirtualHost>

Jakieś pomysły?

/// edit ///

Nie wiem co z czym się gryzło, ale użycie innej domeny niż

localhost spowodowalo, że problem z doklejaniem fizycznego katalogu

zniknął.

RewriteEngine on

RewriteCond %{HTTP_HOST} ^(.*\.)?(univ|ug)\.gda\.l$ [NC]
RewriteRule ^(.*) %{HTTP_HOST}$1 [C]
RewriteRule ^(.*\.)?(univ|ug)\.gda\.l(.*)? https://$1ug.edu.l/ 	
[L,R=301]

<VirtualHost 127.0.0.1:80>
DocumentRoot D:/xampp/htdocs/ugedu/
ServerName ug.edu.l
ServerAlias *.ug.edu.l
</VirtualHost>

<VirtualHost 127.0.0.1:80>
DocumentRoot D:/xampp/htdocs/univgda/
ServerName univ.gda.l
ServerAlias *.univ.gda.l
</VirtualHost>

Pojawił się jednak kolejny, a mianowicie. Jak zmusić apache'a do

przepisywania ścieżki do katalogów, np.

https://test.univ.gda.l/kat1/kat2/?param=1 przerzuca na

https://test.ug.edu.l/?param=1 czyli wycina nazwy katalogów. Co

może być przyczyną?

Odnośnik do komentarza
Udostępnij na innych stronach

You can use the [QSA] flag in addition to these query string manipulations, merge them. In the next example, the value of foo becomes the directory in the target URL, and the variable file is magically created. The original query string is then tagged back onto the end of the whole thing..

QSA Overkill!

Options +FollowSymlinks

RewriteEngine On

RewriteCond %{QUERY_STRING} foo=(.+)

RewriteRule ^grab/(.*) /%1/index.php?file=$1 [QSA]

So a request for..

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zainteresuj się wildcardem dla przepisania subdomen na wybraną domenę główną .

Poza tym w pliku apache.conf możesz sobie ustawić dokładnie co chcesz obsłuchiwać za domeny i na jaki katalog mają wskazywać.

https://httpd.apache.org/docs/2.0/configuring.html

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Nie rozumiem w czym tkwi problem - przecież wszystko jest opisane w necie o htaccess i konfiguracji apache.

----

Jak nie wiesz jak to zrobić w "apache" możesz zrobić w PHP :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

To nie jest zwykly serwis. Domena z ogromem subdomen, gdzie większość z nich ma swój własny serwer. Co tu będę gadał. Strona jest uczelni, kilkanascie wydzialów, kazdy ma swoja poddomene i serwery. PHP nie wchodzi w grę.

Tak jak napisane jest w kodzie rewrite: domena ug.gda.l i univ.gd.l -> ug.edu.l z zachowaniem subdomen i zapytania. Twoje odpowiedzi wyglądają, że nie przeczytałeś w czym problem.

Jak zmusić apache'a do przepisywania ścieżki do katalogów, np.

https://test.univ.gda.l/kat1/kat2/?param=1 przerzuca na

https://test.ug.edu.l/?param=1 czyli wycina nazwy katalogów.

Co może być przyczyną? Czy źle sformulowane regexpy czy jak?

RewriteEngine On
RewriteCond %{HTTP_HOST} (.*)staradomena.pl$
RewriteRule (.*) https://%1nowadomena.pl/$1 [QSA,R=301,L]

Ooo to już jest jakiś trop :) Tylko czym się rózni %1 od $1

Odnośnik do komentarza
Udostępnij na innych stronach

To może na przykładzie: po wpisaniu adres.staradomena.pl/katalog1/katalog2.php?zmienna=1&druga=2 w %1 znajduje się "adres." a w $1 "katalog1/katalog2.php?zmienna=1&druga=2", tak więc wykona przekierowanie 301 na "adres.nowadomena.pl/katalog1/katalog2.php?zmienna=1&druga=2" (jak - o ile dobrze zrozumiałem - ma to właśnie działać).

Na emeryturze po SEO zajmuję się R&D.

Odnośnik do komentarza
Udostępnij na innych stronach

Tak dokładnie, nie wiem czemu ale ubzdurałem sobie, ze nie mozna się dostac do elementow dopasowanych w RewriteCond :) Niemniej jednak powtarza się problem napisany na poczatku tematu, czyli

Powyższy kod prawie działa.

https://test.univ.gda.localhost/ przekierowuje do https://test.ug.edu.localhost/univgda/ z tym, że univgda/ jest zbędne i jest fizycznym katalogiem, gdzie jest

zdefiniowany virtualhost w Apachu:

Odnośnik do komentarza
Udostępnij na innych stronach

Możesz sprawdzić czy katalog istnieje

# Allow any files or directories that exist to be displayed directly

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

RewriteEngine on

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} (.*)(univ|ug)\.gda\.l$
RewriteRule (.*) https://%1ug.edu.l/$1 [QSA,R=301,L]

Niestety dalej to samo. https://2.1.cccc.univ.gda.l/kat1/?sdad ->> https://2.1.cccc.ug.edu.l/univgda/kat1/?sdad

A w przypadku samej domeny czyli univ.gda.l w ogole nie reaguje i nie przekierowuje.

Tez mi przyszło do głowy, ze coś z XAMPPem jest nie tak, bo ktalogi z zawartoscią znajdują się w /htdocs/ dla domeny localhost, który też jest DocumentRoot dla całego XAMPPa. Spróbuję na jakimś UNIXie, czyli docelowym srodowisku produkcyjnym.

Odnośnik do komentarza
Udostępnij na innych stronach

DocumentRoot < to ustawiasz dowolnie w konfigu apacha

-----

Ustaw wszystkie żądania do serwera HTTP na jeden katalog W tym katalogu w index.php napisz stosowny router dopasowanie => przekierowanie 301

Header( "HTTP/1.1 301 Moved Permanently" );

Header( "Location: $nowyAdres" );

i po sprawie :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Też o tym myślałem, a sprawę udało się rozwiązać na poziomie APACHE'a. Problemem okazało się RewriteBase, a mianowicie jego zróżnicowanie w zależności, który VirtualHost się odpalał. Mniejsza o szczegóły. Wystarczyło dodać VirtualHost, który obsłuży te "złe" hosty i przekieruje je na właściwy :)

<VirtualHost *:80>
DocumentRoot /var/www/univgda/
ServerName univ.gda.l
ServerAlias *.univ.gda.l
ServerAlias ug.gda.l
ServerAlias *.ug.gda.l

  RewriteEngine on
  RewriteCond %{HTTP_HOST} (.*)(univ|ug)\.gda\.l$
  RewriteRule (.*) https://%1ug.edu.l$1 [QSA,R=301,L]
</VirtualHost>

Co daje upragniony przeze mnie efekt ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności