Drukowana wersja tematu
Forum PHP.pl _ Apache _ htaccess blokada duplikatów
Napisany przez: PiotrN 27.08.2019, 22:45:40
Czy można osiągnąć następujący efekt:
po wpisaniu https://adresstrony.pl/blog.php --- przekierowanie --> 404,
po wpisaniu https://adresstrony.pl/blog.php?id=... --- przekierowanie --> blog.php?id=
Ponadto czy można jakoś pominąć duplikaty stron. Strona z wpisem wyświetla się pod adresem /blog.php?id=57,
ale istnieje możliwość wyświetlenia tej strony również pod adresem /blog.php?id=testowywpis
Czy można ustawić przekierowanie i zablokować indeksowanie tej z id=57 na rzecz tej drugiej?
Jak ostatecznie osiągnąć adres https://adresstrony.pl/blog/testowywpis ?
Napisany przez: trueblue 28.08.2019, 06:57:29
Kod
RewriteCond %{REQUEST_URI} ^/blog.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule .* https://adresstrony.pl/blad.php [R=404,L]
Jeśli nie zadziała, to zmień drugi warunek na:
Kod
RewriteCond %{QUERY_STRING} !.
Poczytaj o kanonicznych adresach URL.
https://kawalekkodu.pl/czy-to-ty-czy-to-ja-czyli-duplicate-content
Napisany przez: PiotrN 28.08.2019, 12:24:02
/blog.php?id=0
Można zrobić jeden wyjątek, aby ten powyższy adres był blokowany? Chodzi o ten konkretny adres z id=0.
Po wpisaniu /blog.php -- przekierowanie --> 404
Po wpisaniu /blog.php?id=0 -- przekierowanie --> 404
Napisany przez: trueblue 29.08.2019, 07:04:08
Za drugim warunkiem dodaj flagę: [OR]
i trzeci warunek:
Kod
RewriteCond %{QUERY_STRING} ^id=0$
Spróbuj takich reguł:
Kod
RewriteCond %{REQUEST_URI} ^/blog.php$
RewriteCond %{QUERY_STRING} !^id=(\d+)$ [OR]
RewriteCond %{QUERY_STRING} ^id=0$
RewriteRule .* https://adresstrony.pl/blad.php [R=404,L]
Powinny przekierować wszystkie nienumeryczne (w tym brak) i zerowe id na 404.
Napisany przez: PiotrN 29.08.2019, 13:18:00
Wielkie dzięki! Twoja pomoc jest nieoceniona.
Zastanawiam się jeszcze nad dwoma przypadkami.
Oprócz tego co napisałeś dodałem jeszcze do .htaccess poniższą linijkę:
Kod
RewriteRule ^blog/([^/]*)$ /blog.php?id=$1 [L]
O ile /blog.php?id=0 został skutecznie zablokowany, tak /blog/0 nadal nie.
Poza tym zastanawiam się, czy można na sztywno ustawić takie przedziały ID, które przekierują na 404 - np. 0-49 (?id=0, ?id=20, /id=49) i 61-100.
Znasz może jakieś konkretne żródło, gdzie mógłbym poczytać o tym co dzieję się w tym fragmencie, który opublikowałeś?
Napisany przez: trueblue 29.08.2019, 13:26:18
https://httpd.apache.org/docs/current/rewrite/
oraz jakiś podręcznik do nauki wyrażeń regularnych.
Wyrażenia regularne nie nadają się za bardzo do kryteriów opartych o zakresy liczbowe. Nie możesz tego kontrolować na poziomie kodu?
Skąd się bierze adres /blog/0, chcesz powiedzieć, że każdy wpis jest dostępny zarówno w postaci blog.php?id=X jak i blog/X?
Napisany przez: PiotrN 29.08.2019, 14:15:12
Niestety tak jest - do tej samej strony prowadzą 3 różne adresy:
/blog.php?id=10
/blog/10
/blog/tytul
Nie widzę innego rozwiązania.
Niemniej, na każdej podstronie z postem jest:
<http://december.com/html/4/element/link.html rel="canonical" href="https://adresstrony.pl/blog/tytul">
Mogę jakoś zablokować /blog/0? blog.php?id=0 jest już zablokowane i odsyła na 404.
Napisany przez: trueblue 29.08.2019, 14:23:51
Kod
RewriteCond %{REQUEST_URI} !^/blog/(\d+)$ [OR]
RewriteCond %{REQUEST_URI} ^/blog/0$
RewriteRule .* https://adresstrony.pl/blad.php [R=404,L]
Napisany przez: PiotrN 29.08.2019, 23:46:44
Niestety, ale coś nie trybi...
Pewnie problemem jest to:
Kod
RewriteRule ^blog/([^/]*)$ /blog.php?id=$1 [L]
Cały .htaccess:
Kod
Options -Indexes
Index przerwa.html index.php
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^blog/([^/]*)$ /blog.php?id=$1 [L]
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{REQUEST_URI} ^/blog.php$
RewriteCond %{QUERY_STRING} !^id=(\d+)$ [OR]
RewriteCond %{QUERY_STRING} ^id=0$
RewriteRule .* https://adresstrony.pl/404.shtml [R=404,L]
RewriteCond %{REQUEST_URI} !^/blog/(\d+)$ [OR]
RewriteCond %{REQUEST_URI} ^/blog/0$
RewriteRule .* https://adresstrony.pl/404.shtml [R=404,L]
Próbowałem usuwać też tymi ogólnodostępnymi metodami rozszerzenia pozostałych podstron, aby zamiast /kontakt.php było /kontakt, ale też nie chciało coś działać...
W taki sposób poradziłem sobie z /blog/0:
Kod
Redirect 301 /blog/0 /404.shtml
Chciałbym jeszcze usunąć rozszerzenia .php, aby było /kontakt zamiast /kontakt.php
Napisany przez: trueblue 30.08.2019, 08:43:00
Poszperaj w Google, znajdziesz rozwiązanie ostatniego problemu.
Przy czym linki w serwisie musisz generować bez rozszerzenia .php, jeśli takie istnieją.
Napisany przez: PiotrN 30.08.2019, 23:50:00
Dziwna sytuacja.
Co zrobić w przypadku, gdy nie mogę dostać się do katalogu /cms z powodu "pętli przekierowań"?
"ERR_TOO_MANY_REDIRECTS"
Pomaga dopiero gdy wyłączę https://
Kod
RewriteCond %{HTTPS} !=on
Kod
RewriteCond %{HTTPS} !=off
Ciasteczka mam włączone,
Zgodnie z sugestiami też je usuwałem,
Sprawdzałem na trzech różnych przeglądarkach.
Jaka może być przyczyna? Pozostaje tylko kontakt z hostingiem?
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)