Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Header location - prawidłowy zapis
Forum PHP.pl > Forum > Przedszkole
tenloginjestzajety
Witam
mam problem z kodem, nie wiem jak powinien być prawidłowy zapisany:
  1. <?php
  2. header('Location: 'str_replace('%B9','a',
  3. str_replace('%9C','s',
  4. str_replace('%9F','z',
  5. str_replace('%B1','a',
  6. str_replace('%E6','c',
  7. str_replace('%EA','e',
  8. str_replace('%B3','l',
  9. str_replace('%F1','n',
  10. str_replace('%F3','o',
  11. str_replace('%B6','s',
  12. str_replace('%BC','z',
  13. str_replace('%BF','z',
  14. str_replace('%20','_',rawurlencode($row['nazwa']))))))))))))))
  15. );
  16. ?>


Wyskakuje błąd, dziękuje za pomoc.
sazian
Cytat(tenloginjestzajety @ 2.01.2015, 20:14:05 ) *
Wyskakuje błąd

fajne, a jaki ?
tenloginjestzajety
Warning: Cannot modify header information - headers already sent by (output started at /mojadomena.pl/index.php:1) in /mojadomena.pl/index.php on line 3
sazian
wywal wszystkie znaki które są przez <?php
tenloginjestzajety
Dziękuje, błędów nie wyrzuca jednak nie zmienia znaków a adresie przeglądarki, ma ktoś jakiś pomysł?

Problem polega na tym, że ludzie wpisuje wulgarne słowa w mojadomena.pl/slowo.. i google to indeksuje i nie wiem jak to zablokować..
Rysh
Z pewnością brakuje Ci kropki po Location.
http://ideone.com/ICAl93
tenloginjestzajety
W mojej ocenie problemem jest chyba serwer, ponieważ na wszystkich stronach jak w zmienisz adres url i naciśniesz enter to i tak wraca do pierwotnej wersji. U mnie zostaje i przez to google indeksuje śmieci oraz nie działa header location. Serwer mam w home..
trueblue
Dla nieistniejących stron należy wygenerować nagłówek http ze statusem 404, albo w kodzie, albo poprzez .htaccess. Serwer bez Twojej ingerencji tego nie obsługuje.
tenloginjestzajety
Niestety nie działa zamiana zastosowana w header. Stosuję ją w linkach itd na stronie i działa prawidłowo ale w header nie reaguje, sama komenda działa, ponieważ po wpisaniu np. test w location przekierowuje.. Nie mam już pomysłów. Pomóżcie..
trueblue
Pokaż jak wprowadziłeś zmianę.
tenloginjestzajety
Problem w tym, że w ogóle nie odczytuje zmiennych, mały test:

DZIAŁA
  1. <?php
  2. header("HTTP/1.1 301 Moved Permanently");
  3. header('Location: '.'test');
  4. ?>


NIE DZIAŁA
  1. <?php
  2. header("HTTP/1.1 301 Moved Permanently");
  3. header('Location: '.$header);
  4. $header = 'test';
  5. ?>


NIE DZIAŁA
A zmiana wygląda tak ( działa wszędzie poza header ):
  1. <?php
  2. header("HTTP/1.1 301 Moved Permanently");
  3. header('Location: '.str_replace('%B9','a',
  4. str_replace('%9C','s',
  5. str_replace('%9F','z',
  6. str_replace('%B1','a',
  7. str_replace('%E6','c',
  8. str_replace('%EA','e',
  9. str_replace('%B3','l',
  10. str_replace('%F1','n',
  11. str_replace('%F3','o',
  12. str_replace('%B6','s',
  13. str_replace('%BC','z',
  14. str_replace('%BF','z',
  15. str_replace('%20','_',rawurlencode($row['nazwa']))))))))))))))
  16. );
  17. ?>
trueblue
  1. header('Location: '.$header);
  2. $header = 'test';

Tu przypisujesz wartość zmiennej po wywołaniu header.

Pisałeś wcześniej, że zaindeksowało Ci strony z wulgarnymi słowami w adresie. Tego nie rozwiążesz z pomocą statusu 301, a jeszcze pogorszysz sprawę. Nieistniejące adresy należy wygenerować ze statusem 404.
tenloginjestzajety
Udało się ale wyskakuje teraz:
Zapętlenie przekierowań na stronie
trueblue
Na jaki adres przekierowujesz, pod jakim adresem jest przekierowanie za pomocą header?
Rysh
Daj takie coś:
  1. header("HTTP/1.0 404 Not Found");

Dla wszystkich nieistniejących/wulgarnych zapytań.
tenloginjestzajety
Wszystko działa poza jednym, tworzy się pętla co jest oczywiste, ponieważ non stop zmienia adres url. Jak więc tego uniknąć?

To przekierowanie wykorzystuje do duplikatu URL podstron z pl i bez pl znaków ( obie wersje zaindeksowane przez google :/ ) sytuacja wygląda tak:
mojadomena.pl/podstrona%9C - tą wersje miałem kiedyś.. Nadal jest w google..
zamienia na
mojadomena.pl/podstronas - tą wersje mam na stronie w postaci linków i tytułów.

Problem w tym, że jest to ta sama strona tylko z nowym adresem bez krzaków i powstaje pętla przekierowań.

  1. <?php
  2. $header = str_replace('%B9','a',
  3. str_replace('%9C','s',
  4. str_replace('%9F','z',
  5. str_replace('%B1','a',
  6. str_replace('%E6','c',
  7. str_replace('%EA','e',
  8. str_replace('%B3','l',
  9. str_replace('%F1','n',
  10. str_replace('%F3','o',
  11. str_replace('%B6','s',
  12. str_replace('%BC','z',
  13. str_replace('%BF','z',
  14. str_replace('%20','_',rawurldecode(substr($_SERVER['REQUEST_URI'],
  15. (strrpos($_SERVER['REQUEST_URI'],'/',-2)+1))))))))))))))));
  16. header("HTTP/1.0 404 Not Found");
  17. header('Location: '.$header);
  18. ?>


Lub jak za pomocą header htaccess blokować strony, które w adresie mają krzaki..
trueblue
Powinieneś przekierować tylko takie adresy, które chcesz przekierować.
W tym kodzie przekierowujesz bezwarunkowo.
tenloginjestzajety
Problem rozwiązany, zrobiłem przekierowanie na osobny katalog, w którym zamieściłem ten sam kod bez header eliminując pętle. Dziękuje bardzo Wszystkim za pomoc!
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.