2017-09-04 74 views
7

Następujące reguły działają na http, ale nie na https.Apache manipulujący ciągiem zapytania na https

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1? [L] 
RewriteRule ^/path/file.html$ https://www.domain.tld/path/file/ [R=301,L] 

Dlaczego część query_string nie działa w https?

+0

są one jedynymi zasady masz? – akond

+0

Nie, po przekierowaniu 301 w ten sposób: RewriteRule ^/path/file.html $ https: //www.domain.tld/path/file/ [R = 301, L] – Giuseppe

+0

Jaki jest sens 'RewriteRule (. *)/1 $? [L] '? – akond

Odpowiedz

0

Na podstawie komentarzy Twojego pytania wydaje się, że chcesz usunąć ciąg zapytania w dowolnym momencie, gdy pojawi się parametr strony. Ten rodzaj reguły przepisywania nie znika ani nie zmienia adresu URL, chyba że istnieje przekierowanie. Jeśli więc nie dodasz R=301 lub R do reguły przepisywania, ciąg zapytania nie zostanie usunięty. Wszystkie poniższe pracował na moim serwerze, aby usunąć ciąg kwerendy, a mój serwer jest 100% HTTPS:

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1? [R=301,L] 

Lub może być w stanie użyć flagi QSD zamiast znaku zapytania:

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1 [R=301,L,QSD] 

Lub może być w stanie używać coś takiego:

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule .* /? [R=301,L] 

Albo po prostu R (do 302) zamiast R = 301:

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1? [R,L] 

Ale w żadnym wypadku nie usunięto ciągu zapytania, chyba że użyłem przekierowania.

0

naprawdę wszystko, czego potrzebujesz to QSDhttp://httpd.apache.org/docs/current/rewrite/flags.htm

RewriteCond %{QUERY_STRING} "page=" [NC] 
RewriteRule (.*) /$1 [L,QSD] 

Nie jestem pewien, dlaczego to działa, ale nie na http https chyba że używasz oddzielnych vhosty dla HTTP i HTTPS oraz settigns były nieznacznie różne

Pamiętaj, że reguły przepisywania są wewnętrzne, chyba że używasz flagi R. Kiedy używasz flagi R, mówi przeglądarce, aby przejść na inną stronę, powodując pełny objazd serwera/klienta. W przeciwnym razie po prostu zmienia żądanie i postępuje normalnie.

+0

Niestety również z flagą QSD nie działało – Giuseppe

+0

Czy zdefiniowałeś, że nie działa? Jeśli szukasz w przeglądarce na URI, to nie zmieni się tak jak wspomniałem, chyba że użyjesz flagi R. Czy mówisz, że ciąg kwerendy jest nadal dostępny w cokolwiek, co używasz za Apache (php, python, inne cgi)? – pucky124

0

nie jestem mocny z pliku .htaccess, i nie mogę wyjaśnić, co dzieje się za kulisami, ale z moim zdaniem plik .htaccess powinien wyglądać tak: praca

RewriteCond %{QUERY_STRING} page= [NC] 
RewriteRule (.*) /$1? [L] 
RewriteRule ^path/file.html$ https://www.domain.tld/path/file/ [R=301,L] 

It doskonale dla

http://example.com?page=1 
https://example.com/?page=1 
http://example.com/path/file.html 
https://example.com/path/file.html 

Testowany (miłością) here

+0

Niestety to nie działa – Giuseppe

+0

Ahaha, jeśli żadna z sugerowanych odpowiedzi nie działa, prawdopodobnie masz inny problem. Spróbuj ponownie zainstalować Apache lub podaj więcej szczegółów. Sądzę, że masz jedną małą opcję lub dyrektywę gdzieś w plikach konfiguracyjnych Apache i nikt nie może ci pomóc. – degr