Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML]Problem z przekierowaniem (mod_rewrite) w .htaccess
Forum PHP.pl > Forum > Przedszkole
maniek99
Korzystam ze skryptu, który umożliwia upload plików na serwer i późniejsze ich pobieranie (taki prosty hosting plików)
Po wywołaniu linka w stylu:

www.domena.pl/zxc rozpoczyna się pobieranie danego pliku (file_download.php), natomiast po wywołaniu
www.domena.pl/zxc~i pojawia się strona tego pliku z różnymi informacjami na jego temat (share_file.php)

Problem polega na tym, że chciałbym, aby było na odwrót, czyli po wywołaniu linka bez (~i) pojawiała się strona pliku, a po wywołaniu linka z ~i rozpoczynało się pobieranie.

Mój plik .htaccess wygląda tak:

  1. RewriteEngine On
  2. RewriteBase /
  3. RewriteCond %{REQUEST_URI} ^(.+)\~s$
  4. RewriteRule ^(.*) stats.php?u=$1 [L]
  5.  
  6. RewriteCond %{REQUEST_URI} ^(.+)\~d$
  7. RewriteRule ^(.*) delete_file.php?u=$1 [QSA,L]
  8.  
  9. RewriteCond %{REQUEST_URI} ^(.+)\~i$
  10. RewriteRule ^(.*) share_file.php?u=$1 [QSA,L]
  11.  
  12. RewriteCond %{REQUEST_URI} ^(.+)\~f$
  13. RewriteRule ^(.*) view_folder.php?f=$1 [QSA,L]
  14.  
  15. RewriteCond %{REQUEST_FILENAME} !-f
  16. RewriteCond %{REQUEST_FILENAME} !-d
  17. RewriteCond $1 !\.html$
  18. RewriteRule ^(.*) file_download.php?u=$1 [QSA,L]
  19.  
  20. RewriteRule ^(.*).html$ $1.php [QSA,L]


Zamianiłem to w ten sposób, że w przedostatniej regule zamieniłem file_download.php na share_file.php i teraz jest niby tak jak chciałem,
Czyli po wywołaniu www.domena.pl/zxc jest strona informacyjna, zamiast pobierania, ale znowu drugi link
www.domena.pl/zxc~i zamiast udostępnić pobieranie działa tak samo jak ten pierwszy. Tak wygląda mój aktualny .htaccess

  1. RewriteEngine On
  2. RewriteBase /
  3. RewriteCond %{REQUEST_URI} ^(.+)\~s$
  4. RewriteRule ^(.*) stats.php?u=$1 [L]
  5.  
  6. RewriteCond %{REQUEST_URI} ^(.+)\~d$
  7. RewriteRule ^(.*) delete_file.php?u=$1 [QSA,L]
  8.  
  9. RewriteCond %{REQUEST_URI} ^(.+)\~i$
  10. RewriteRule ^(.*) share_file.php?u=$1 [QSA,L]
  11.  
  12. RewriteCond %{REQUEST_URI} ^(.+)\~f$
  13. RewriteRule ^(.*) view_folder.php?f=$1 [QSA,L]
  14.  
  15. RewriteCond %{REQUEST_FILENAME} !-f
  16. RewriteCond %{REQUEST_FILENAME} !-d
  17. RewriteCond %{REQUEST_URI} ^(.+)\~i$
  18. RewriteRule ^(.*) file_download.php?u=$1 [QSA,L]
  19.  
  20. RewriteCond %{REQUEST_FILENAME} !-f
  21. RewriteCond %{REQUEST_FILENAME} !-d
  22. RewriteCond $1 !\.html$
  23. #RewriteRule ^(.*) file_download.php?u=$1 [QSA,L]
  24. RewriteRule ^(.*) share_file.php?u=$1 [QSA,L]



Proszę o pomoc, dlaczego nie działa reguła z file_download.php, przy wywołaniu linka: www.domena.pl/zxc~i ?
artuross

Kod
RewriteCond %{REQUEST_URI} ^(.+)\~i$
RewriteRule ^(.*) file_download.php?u=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !\.html$
RewriteRule ^(.*) share_file.php?u=$1 [QSA,L]


Nie sprawdzalem, ale powinno dzialac.
maniek99
Niestety nie działa, zamiast file_download.php ładuje się strona główna.
artuross
To moze podaj konkretny przyklad dla jakiego ma dzialac, bo sie lekko pogubilem.
maniek99
Po prostu po wywołaniu linka domena.pl/asd~i ma się wykonywać file_download.php
artuross
domena.pl/asd~i ma się wykonywać file_download.php

Kod
RewriteCond %{REQUEST_URI} ^(.+)\~i$
RewriteRule .* file_download.php?u=$1 [QSD,L]


To dziala tak: jezeli wchodzisz z dowolnego URI, ktore konczy sie na ~i to przekierowuje na file_download.php?u=<tutaj ten URI, bez ~i>
maniek99
Jednak, jak już wspomniałem to nie działa i przekierowywuje mnie na stronę główną.
Pewnie dlatego, że pominąłeś:
  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d


On musi znać nazwę pliku i katalogu, i powinno to wyglądać wg mnie tak:


  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteCond %{REQUEST_URI} ^(.+)\~i$
  4. RewriteRule ^(.*) file_download.php?u=$1 [QSA,L]


Jednak jak dodaje te requesty to nic to nie zmienia i ciągle po wybraniu domena.pl/asd~i kieruje mnie na stronę główną.
O co chodzi ?
artuross
Skoro powinno wygladac tak, to czemu nie dziala? Nie, nie musi znac katalogu ani folderu. Po prostu dodaj &rw=1 i sprawdzaj czy istnieje, jezeli nie istnieje to rob przekierowanie, to zadziala na 100%.
maniek99
Sądzę, że musi, skoro by nie musiał to po co ten kod w wersji oryginalnej ?
Ogólnie wielkie dzięki za zaangażowanie, chętnie postawie DUŻE PIWO biggrin.gif

Z jakiegoś jednak powodu działa to:
  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteCond $1 !\.html$
  4. RewriteRule ^(.*) file_download.php?u=$1 [QSA,L]


ale to już nie działa:

  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteCond %{REQUEST_URI} ^(.+)\~i$
  4. RewriteRule ^(.*) file_download.php?u=$1 [QSA,L]


czyli ten 3 reweitecond nie dziala, bo oryginał (który działa) ma: RewriteCond $1 !\.html$ (co to w ogóle znaczy? dla każdego 'czegoś' różnego od *.html?)
a jak go zamieniam na RewriteCond %{REQUEST_URI} ^(.+)\~i$ czyli link z ~i na końcu to już sobię z tym nie radzi. Nie qmam tego.
Jeśli chcesz to mogę wysłać Ci na PW, dokładny link do strony gdzie to wszystko się dzieje...no i idziemy później na piwo wink.gif
artuross
Kod w wersji oryginalnej jest po to, ze gdy chcesz przejsc do /public/ masz to umozliwione, bez tego nie daloby rady, tak, jesli moge prosic to daj ten link. A widzisz, czyli sam znalazles rozwiazanie biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.