Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> htaccess blokada duplikatów
PiotrN
post 27.08.2019, 22:45:40
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 8.05.2010

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował PiotrN 27.08.2019, 22:45:59
Go to the top of the page
+Quote Post
trueblue
post 28.08.2019, 06:57:29
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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-...plicate-content




Ten post edytował trueblue 28.08.2019, 06:58:22


--------------------
Go to the top of the page
+Quote Post
PiotrN
post 28.08.2019, 12:24:02
Post #3





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 8.05.2010

Ostrzeżenie: (0%)
-----


/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

Ten post edytował PiotrN 28.08.2019, 20:20:17
Go to the top of the page
+Quote Post
trueblue
post 29.08.2019, 07:04:08
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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.

Ten post edytował trueblue 29.08.2019, 07:25:44


--------------------
Go to the top of the page
+Quote Post
PiotrN
post 29.08.2019, 13:18:00
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 8.05.2010

Ostrzeżenie: (0%)
-----


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ś?

Ten post edytował PiotrN 29.08.2019, 13:18:25
Go to the top of the page
+Quote Post
trueblue
post 29.08.2019, 13:26:18
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
PiotrN
post 29.08.2019, 14:15:12
Post #7





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 8.05.2010

Ostrzeżenie: (0%)
-----


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:
  1. <link 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.

Ten post edytował PiotrN 29.08.2019, 14:17:09
Go to the top of the page
+Quote Post
trueblue
post 29.08.2019, 14:23:51
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Kod
RewriteCond %{REQUEST_URI} !^/blog/(\d+)$ [OR]
RewriteCond %{REQUEST_URI} ^/blog/0$
RewriteRule .* https://adresstrony.pl/blad.php [R=404,L]


--------------------
Go to the top of the page
+Quote Post
PiotrN
post 29.08.2019, 23:46:44
Post #9





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 8.05.2010

Ostrzeżenie: (0%)
-----


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

Ten post edytował PiotrN 29.08.2019, 20:54:04
Go to the top of the page
+Quote Post
trueblue
post 30.08.2019, 08:43:00
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Poszperaj w Google, znajdziesz rozwiązanie ostatniego problemu.
Przy czym linki w serwisie musisz generować bez rozszerzenia .php, jeśli takie istnieją.


--------------------
Go to the top of the page
+Quote Post
PiotrN
post 30.08.2019, 23:50:00
Post #11





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 8.05.2010

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 15:44