Pracuje na frameworku Symfony i rozwiązanie tego problemu byłoby dla mnie zbawieniem.
Mianowicie:
- mamy domenę domena.pl
- oraz cms.domena.pl
- potrzebuję aby domena.pl oraz cms.domena.pl kierowane były na katalog domena.pl/public_html/project/web/ . W katalogu web mam już swojego htaccess który w zależności od domeny kieruje do konkretnego kontrolera (czyt. pliku)
Próbowałem już różnymi sposobami. Problem się rozwiązuje gdy na katalog web/ ustawiane są virtual hosty domena.pl oraz cms.domena.pl.
Tego typu rozwiązanie niestety nie zdaje egzaminu:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domena.pl(.*)$
RewriteRule (.*) http://www.domena.pl/$1 [R=301,L]
RewriteRule ^$ project/web/ [L]
Framework gubi mi linki wewnętrzne. Np. link http://www.domena.pl/images/frontend/under_construction.png jest traktowany jako link bezpośredni, a nie http://www.domena.pl/project/web/images/frontend/under_construction.png
Upraszczając chciałbym, aby jakiś guru linuxowy od htaccessa napisał jak za jego pomocą zrobić dokładnie to samo co przy pomocy virtual hosta, tzn. umieszczam htaccess w katalogu public_html/ a on kieruje ładnie do public_html/project/web/
i każdy link np. domena.pl/css/main.css jest traktowany jako domena.pl/project/web/kontroler/css/main.css
Proszę o pomoc.
dobra odkryłem. Należy to zrobić tak:
- .htaccess umieszczemy w katalogu public:
Options +FollowSymLinks +ExecCGI <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^(.*)$ /project/web/$1 </IfModule>
- drugi htaccess umieszczamy w katalogu web. Ten kieruje na odpowiedni kontroler:
np.
Options +FollowSymLinks +ExecCGI <IfModule mod_rewrite.c> RewriteEngine On # uncomment the following line, if you are having trouble # getting no_script_name to work #RewriteBase / # we skip all files with .something #RewriteCond %{REQUEST_URI} \..+$ #RewriteCond %{REQUEST_URI} !\.html$ #RewriteRule .* - [L] # www redirect RewriteCond %{HTTP_HOST} ^domena.pl(.*) [NC] RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^cms.domena(.*) [NC] RewriteRule ^(.*)$ http://www.cms.domena.pl/$1 [R=301,L] # we check if the .html version is here (caching) RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f # redirect to back controller RewriteCond %{HTTP_HOST} ^www.cms.domena.pl(.*) [NC] RewriteRule ^(.*)$ backend.php [QSA,L] # redirect to front controller RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
- kolejna rzeczą jest plik sfWebRequest. Trzeba go zmodyfikować w taki sposób, aby wycinał ze ścieżki katalogi, których nie chcemy w adresie. Znajduje się on w lib/request/:
{ $this->pathInfoArray['SCRIPT_NAME'] = }
jeżeli chodzi o poddomeny... aby kierowane były na konkretną domenę, w tym przypadku domenę główną to najlepiej użyć wildcarda, na serwerze. Większość hostingów pozwala to zrobić z poziomu graficznego interfejsu.
powyższe punkty pozwalają w pełni skonfigurować minimum potrzebnych elementów do umieszczenia projektu na publicznym serwerze