Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Apache2, php5, Mysql zainstalowane z repozytoriów Etcha. Zrobiłem link symboliczny w mods-enabled do mods-available/rewrite.load. Phpinfo w Loaded Modules pokazuje mod_rewrite. W /sites-enabled/000default wstawiam ustawienia wg porad znalezionych w sieci, ostatnie poniżej:
NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place RedirectMatch ^/$ /apache2-default/ RewriteEngine on AllowOverride all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>
niestety, pomimo wielu testów z ustawieniami z różnych porad, nie udało mi się uzyskać translacji adresów.
Koledzy wołają na piwo, a ja siedzę, już tydzień i goglam i testuję. Już się zapętlam, boję się, że żona zrobi twardy reset.
DUG ostatnim moim ratunkiem!
Offline
Ale co ty właściwie chcesz osiągnąć, jaką translacje adresów? Z tego co widać w configu to masz tylko "RewriteEngine On", powinno działać, ale gdzie jakieś reguły? Nie wiadomo co chcesz i jak widać mod_rewrite jest tylko włączony, ale nic nie zrobi jak mu nie napiszesz czego chcesz.
Ostatnio edytowany przez kamikaze (2008-05-31 15:17:52)
Offline
kamikaze chcę skonfigurować apache tak aby skrypt zamieszczony poniżej informował że: Mod_Rewrite jest zainstalowany na tym serwerze. Zamieszczam ten znany skrypt, ale mam nadzieję że nie ma w nim błędu.
<? if (!empty($sprawdz_mod_rewrite)) { $rewrite_result = 1; } else { $rewrite_result = 0; } if ($rewrite_result == 1) { echo 'Mod_Rewrite jest zainstalowany na tym serwerze'; } else { echo 'Mod_Rewrite nie jest zainstalowany na tym serwerze lub jest błędnie skonfigurowany'; } ?>
htaccess
Options +FollowSymLinks <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(test.php)$ test.php?sprawdz_mod_rewrite=1 [QSA] RewriteRule ^$ test.php?sprawdz_mod_rewrite=1 [QSA] </IfModule>
Gdzie i jakie reguły mam wpisać?
Offline
W skrypcie PHP masz błąd, no chyba że masz włączone register_globals w php.ini, ale wątpie. Więc musisz dodać przed wszystkim co jest w skrypcie linijke:
$sprawdz_mod_rewrite = $_GET['sprawdz_mod_rewrite'];
Offline
Po dodaniu linii na początku skryptu, przeglądarka wyświetla że mod_rewrite jest zainstalowany! Faktycznie w php.ini było register_globals=Off, zmieniłem dla doświadczenia na On i skrypt też informuje że mod_rewrite zainstalowany.
Wszystko fajnie, ale ja tę zabawę robię nie dla tego skryptu, ale dla nieco innych celów.
Kilka tygodni temu bratanica poprosila mnie o poprawienie kilku błędów na firmowym serwisie. Poprawiłem korzystając z panelu administracyjnego serwisu i udostępnionego usera ftp a wtedy padła propozycja nieco glębszych zmian. Serwis na jakimś frameworku AJAX z szablonami Smarty! Dla mnie czarna magia, ale postanowilem spróbować. Dla rozeznania i testów serwisu postawiłem wirtualnego Etcha z serwerem www, ściągnąłem serwis, zaimportowałem bazę i staram się to uruchomić. Niestety w serwisie dalej translacja adresów nie działa, niezależnie czy register_globals włączone cy wyłączone!? (wpisując adresy ktore są w htaccess strony się wyświetlają) Przyszło do glowy trochę późno że zapuszczę phpinfo na serwerze gdzie serwis jest hostingowany, może to coś podpowie?
Serdecznie dziękuje i proszę o dalsze porady.
Offline
Opcja register_globals lepiej żeby była na off, i na pewno nie ma ona nic wspólnego działaniem mod_rewrite. Ciekawe z jakiego frameworka PHP korzysta serwis, jeśli używany jest jakiś framework do Ajax-a raczej nie powinien mieć wpływu na adresy, Ajax jest implementowany w Java Script. Niektóre frameworki PHP używają wbudowanego mechanizmu odwzorowywania adresów url. Ale może też być tak, że serwis korzysta z mod_rewrite. Jeśli korzysta z Mod_rewrite powinieneś skopiować także reguły przepisywania adresów url, reguły to to co jak mniemam sam sobie napisałeś do testów w pliku htaccess, linijki RewriteRule .... Popatrz czy na serwerze są takie pliki, lub konfiguracja mod_rewrite jest gdzieś w konfiguracji Apache. Jeśli grzebiesz na serwerze przez klienta FTP, który nie pokazuje ukrytych plików może być problem ze skopiowaniem plików htacces, które są plikami ukrytymi. Jeśli to działało z mod_rewrite na serwerze to jeśli zdołasz uruchomić te reguły u siebie powinno zacząć działać.
Offline
Ja po prostu wrzuciłem .htaccess z katalogu głównego serwisu do katalogu głownego serwisu na localhoscie, pliki .htaccess w niektórych podkatalogach skopiowalem wraz z podkatalogami, potem ustawiłem uprawnienia dla plików i podkatalogów na 755, wiem że za wysokie ale to na localhoscie. Właśnie po pliku .htaccess w glównym katalogu zorientowałem się że serwis wymaga mod_rewrite.
Z Twoich wypowiedzi zorientowałem się że reguły z htaccess można zamieścić w pliku konfiguracyjnym apacha?
Załączam htacces, może to coś wyjaśni?
htacces:
DirectoryIndex index.php index.html Options +FollowSymLinks RewriteEngine On RewriteRule ^home.html$ /index.php [NC] RewriteRule ^about.html$ /index.php?com=about [NC] RewriteRule ^finance.html$ /index.php?com=finance [NC] RewriteRule ^faq.html$ /index.php?com=faq [NC] RewriteRule ^contact.html$ /index.php?com=contact [NC] RewriteRule ^partners.html$ /index.php?com=partners [NC] RewriteRule ^buy.html$ /index.php?com=buy [NC] RewriteRule ^buy/apartments.html$ /index.php?com=buy&top=apartments [NC] RewriteRule ^buy/apartments_([0-9]{1,4}).html$ /index.php?com=buy&top=apartments&cat=$1 [NC] RewriteRule ^buy/apartments_([0-9]{1,4})_([0-9]{1,3}).html$ /index.php?com=buy&top=apartments&cat=$1&page=$2 [NC] RewriteRule ^buy/developments.html$ /index.php?com=buy&top=developments [NC] RewriteRule ^buy/developments_([0-9]{1,5}).html$ /index.php?com=buy&top=developments&oid=$1 [NC] RewriteRule ^buy/(land|commercial).html$ /index.php?com=buy&top=$1 [NC] RewriteRule ^buy/(land|commercial)_([0-9]{1,4}).html$ /index.php?com=buy&top=$1&oid=$2 [NC] RewriteRule ^rent.html$ /index.php?com=rent [NC] RewriteRule ^rent_([0-9]{1,4}).html$ /index.php?com=rent&cat=$1&oid=0 [NC] RewriteRule ^rent_([0-9]{1,4})_([0-9]{1,4}).html$ /index.php?com=rent&cat=$1&page=$2 [NC] RewriteRule ^property_managment.html$ /index.php?com=property [NC] RewriteRule ^property_managment_([0-9]{1,4}).html$ /index.php?com=property&cat=$1&oid=0 [NC] RewriteRule ^property_managment_([0-9]{1,4})_([0-9]{1,4}).html$ /index.php?com=property&cat=$1&oid=$2 [NC] RewriteRule ^land_development.html$ /index.php?com=land [NC] RewriteRule ^land_development_([0-9]{1,4}).html$ /index.php?com=land&cat=$1&oid=0 [NC] RewriteRule ^land_development_([0-9]{1,4})_([0-9]{1,4}).html$ /index.php?com=land&cat=$1&oid=$2 [NC] RewriteRule ^invest_in_europe.html$ /index.php?com=invest [NC] RewriteRule ^invest_in_europe_([0-9]{1,4}).html$ /index.php?com=invest&cat=$1&oid=0 [NC] RewriteRule ^invest_in_europe_([0-9]{1,4})_([0-9]{1,4}).html$ /index.php?com=invest&cat=$1&oid=$2 [NC] RewriteRule ^print_([0-9]{1,3}).html$ /index.php?com=print&oid=$1 [NC] RewriteRule ^send_([0-9]{1,3}).html$ /index.php?com=send&oid=$1 [NC] RewriteRule ^save_([0-9]{1,3}).html$ /index.php?com=save&oid=$1 [NC]
Offline
Chyba wiem co nie tak, reguły są ok, skoro działały na serwerze muszą też na localhoście. Ale z tego co masz w konfiguracji Apache, serwer nie pozwala na użycie plików .htaccess. Zmień "AllowOverride None" na "AllowOverride all", powinno pomóc.
Offline
Zmieniłem na "AllowOverride all" pod linią FollowSymLinks i niestety nic się nie zmieniło. Czy to ma znaczenie że serwis wrzuciłem do podkatalogu /var/www/podkatalog/ a nie do //var/www/ ?
Offline
Zmień wszędzie w pliku /sites-enabled/000default i zobacz wtedy.
Offline
Zmieniłem wszędzie na AllowOverride all w 000default:
1. strona w /var/www/folder/ po wyświetleniu startowej, po naciśnięciu na jakikolwiek odnośnik: nie ma takiego adresu...
2. strona w /var/www/apache2-default/; wyświetla startową ale w pasku adresu przeglądarki: http://localhost/apache2-default/?sprawdz_mod_rewrite=1 dopisuje?
3. Skrypt testowy mod_rewrite informuje, że mod rewrite zainstalowane!?
Albo to mod_rewrite jest nieodpowiednie dla tej strony? albo jest ona specjalnie zabezpieczona!? na serwerze hostingowym jest kilka pustych plików w katalogu głównym serwisu i w /public_html. Uznalem je za nieaktulne śmieci. muszę je przeglądnąć.
kamikaze, czy te informacje może coś wyjaśniają?
Offline
Kamikaze serdecznie dziękuję.
Przeglądnąłem te pliki i dochodzę do wniosku że sprawa jest poważniejsza i wychodzi poza zakres tematyczny tego forum. Prawdopodobnie zrezygnuję z zabawy tym serwisem. To mnie wysoko przerasta. Ale zalączam odczytaną treść plików które dotąd zlekceważylem:
Pliki przed katalogiem głównym serwisu /public_html:
Plik ftpchk3.php;
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "OK";
Plik ftpchk3.pl; pusty.
Plik google0f4567b.......html; pusty? binarny?.
Pliki w /public_html:
ftpchk3.php; <? echo("OK"); ?>
ftpchk3.pl konfiguruje smtp mail
Plik google0f4567b.........html
A może jednak???
Offline
Jeśli strona jest w w /var/www/folder/ zrób oddzielną virtualkę z RootDir /var/www/folder/ , bo w twoim przypadku reguły mod_rewrite stały się niepoprawne. Teraz urle do strony wyglądają http://localhost/folder/... , co nie zgadza się z regułami. Więc masz trzy wyjścia albo zrobisz tą virtualkę jak napisałem wyżej co będzie chyba najlepsze, albo jeśli tego nie potrafisz wrzucisz wszystko do katalogu /var/www i wywalisz "RedirectMatch ^/$ /apache2-default/" z domyślnej virtualki, albo dodasz "/folder/" do każdej reguły mod_rewrite co dla przykładu by wyglądało tak:
RewriteRule ^folder/home.html$ /folder/index.php [NC]
Offline
Działa! Jak na razie zrobiłem wg trzeciego sposobu opisanego przez kamikaze. Z tym że dla serwisu w /var/www/katalog/ w moim przypadku dziala cod
RewriteRule ^home.html$ /katalog/index.php [NC]
.
Dziekuję.
Offline