ugrás a tartalomhoz

http post kérés átirányítása RewriteCond és RewriteRule-al

tommylee · 2013. Ápr. 8. (H), 18.06
Üdvözlet!

Olyan kérdésem volna, amelyhez nem találtam eddig megoldást.

Linux-apache webszerveren a htaccess-ben kéne megoldani a következő problémát:
Egy felhasználói (asztali) alkalmazás küldene egy post kérést a webszervernek a következő url-re pl http://www.domain.hu/check.php (egy post paraméterrel).
Eddig működött a dolog, de a domain elérését megváltoztattuk http://domain.hu/check.php -re, tehát lekerült a www a cím elejéről.
Az asztali alkalmazás kódját már nem lehet megváltoztatni.
Ez a fenti kérés pedig így nem akar működni!
Erre szeretnék megoldást találni. Köszi!
 
1

.htaccess?

janoszen · 2013. Ápr. 8. (H), 18.16
A .htaccess filet masold be legyszi, ugy egy kicsit konnyebb lesz segiteni.
2

htaccess röviden

tommylee · 2013. Ápr. 8. (H), 18.22
Options -Indexes +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.domain\.hu [NC]
RewriteRule ^(.*)$ http://domain\.hu/$1 [R=301,L]

RewriteRule check\.php http://domain.hu/checkpost\.php/$1 [NC,P]

# ---
# A RewriteCond-ot se tudtam beállítani, úgyhogy ez kimaradt.
# Tehát a check.php post kérését kéne átpasszolni a checkpost.php-nak.
3

Paraméterek

complex857 · 2013. Ápr. 8. (H), 18.24
Ha post requestet irányítasz át (HTTP 301 vagy 302) a böngésző nem fogja újra elküldeni az eredeti requestbenben lévő paramétereket, illetve a kapott Location -t mar GET -el keresi majd fel! Valószínűleg jobban jársz ha átengeded www nélküli domainen is ezt (vagy méginkább minden POST) requestet.
4

kivétel

tommylee · 2013. Ápr. 8. (H), 18.27
Az is jó megoldás lenne számunkra, ha csak ezt az egy url-t ne irányítsa át a www-nélküli címre.
A többi mehetne a www nélkülire.
6

Valami ilyesmivel

complex857 · 2013. Ápr. 8. (H), 18.48
Valami ilyesmivel próbálkoznék:

RewriteCond %{HTTP_HOST} =domain.com                 # ha a regi domain
RewriteCond %{REQUEST_METHOD} !=POST [NC]            # es nem POST
RewriteRule (.*) http://www.domain.com/$1 [R=302,L]  # irany www domain

Vagy ha csak egyes url-ekre akkor elvileg szűrhetsz így:
RewriteCond %{HTTP_HOST} =domain.com                 # ha a regi domain
RewriteCond %{REQUEST_URI} !^check\.php$             # es nem a check.php
RewriteRule (.*) http://www.domain.com/$1 [R=302,L]  # irany www domain
7

nem

tommylee · 2013. Ápr. 8. (H), 18.55
Az utóbbit próbáltam, de nem akar működni.
10

Tanácstalan vagyok,

complex857 · 2013. Ápr. 8. (H), 19.16
Tanácstalan vagyok, improvizált teszt környezetemben mindkettő tette a dolgát. Ha böngészővel tesztelsz, könnyen lehet, hogy csak korábbi 301 -ek cachelt eredényét látod, próbáld meg curl -el pl így:

# GET teszt, valaszban 301 -et kellene látni (teljes komunikáció ki lesz dumpolva)
$ curl -v http://domain.com/check.php

# POST teszt, itt http 200 -nak kellene visszajonnie)
$ curl -v -X POST http://domain.com/chech.php


A megadott pattern is lehet a probléma ha van RewriteBase megadva, vagy subdir -en belül van a file.
RewriteLog szintén segíthet debuggolásban.

(Most látom csak, hogy a fenti példában a www nélküliről küldenélek a www -vel rendelkezőre. domaineket ertelemszerűen cserelgetheted (-: )
12

Ez a htaccess most

tommylee · 2013. Ápr. 8. (H), 19.24
Igen megcseréltem :)

Itt az aktuális kód:

Options -Indexes +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{HTTP_HOST} =www\.domain\.com
RewriteCond %{REQUEST_URI} !^requests/checkversionid\.php$
RewriteRule (.*) http://domain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain\.com/$1 [R=301,L]

---
get kérésre is lecseréli továbbra is..
13

\.

complex857 · 2013. Ápr. 8. (H), 19.38
Ebben a sorban:
RewriteCond %{HTTP_HOST} =www\.domain\.com

Nem szükséges escapelni a "." karaktereket mivel ez nem regexpként, hanem simán string egyezést vizsgál. Lehet egyszerűen (nincs "\", mint korábbi példában):
RewriteCond %{HTTP_HOST} =www.domain.com

Vagy mint az alatta lévő szabályban (nincs "=", mint a működő szabályban):
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]

Ha jól értem a dolgot egyébként elég volna csak az első blokk, a második most kivétel nélkül átdobál mindent igy ha az elsőn át is jut a kivételed most akkorse működne.

Ha elérési út alapon adod meg a kivételt akkor minden request típus (GET, POST, stb.) kivételt fog képezni.
14

Akkor most ez van, de nem

tommylee · 2013. Ápr. 8. (H), 19.41
Akkor most ez van, de nem jó:

Options -Indexes +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.domain.com
RewriteCond %{REQUEST_URI} !^requests/checkversionid\.php$
RewriteRule (.*) http://domain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain\.com/$1 [R=301,L]
15

Most se sikerült eltalálnod,

complex857 · 2013. Ápr. 8. (H), 19.55
Most se sikerült eltalálnod, kivetted az = jelet, és a \ -ket is, (ebbol vagy az egyiket vagy a másikat kellett volna csak), ráadásul az utolsó két sor se kell neked, mivel az mindent át fog irányítani kivétel nélkül!

Legyen csak ez benne, a legutóbb postolt utolsó két sor nélkül:
RewriteCond %{HTTP_HOST} =www.domain.com                   # = -el es \ nelkul
RewriteCond %{REQUEST_URI} !^requests/checkversionid\.php$ # a kivetel
RewriteRule (.*) http://domain.com/$1 [R=301,L]            # mindent ami nem kivetel atiranyitunk
17

De az összes többi url-t át

tommylee · 2013. Ápr. 8. (H), 20.03
RewriteCond %{HTTP_HOST} =www.domain.com
RewriteCond %{REQUEST_URI} !^([^\+]+)checkversionid\.php$
RewriteRule (.*) http://domain.com/$1 [R=301,L]

Ez lett a jó!
Igazad volt, benéztem.
Köszönöm a segítséget!
5

canonical

Hidvégi Gábor · 2013. Ápr. 8. (H), 18.41
rel="canonical" - és akkor nem kell átirányítgatni.
8

canonical

tommylee · 2013. Ápr. 8. (H), 18.58
Ezt nem értem!
Légysz írj kódot, ha lehet!
9

A szöveg magyarul van,

Hidvégi Gábor · 2013. Ápr. 8. (H), 19.06
A szöveg magyarul van, továbbá találhatóak példakódok is. Mit nem értesz pontosan?
11

Nem segít

complex857 · 2013. Ápr. 8. (H), 19.23
Ez a kérdésben vázolt problémán egyáltalán nem segít. Egy asztali alkalmazás próbál adatokat küldeni-kapni egy api végpontról ami elköltözött, nem google botnak próbáljuk megmagyarázni, hogy ez ugyanaz a tartalom két különböző url-en! Ha egyszer eldöntötted, hogy elköltözik egyik domainről a másikra tisztább-szárazabb érzés 301 -eket használni.
16

Csak arra próbáltam

Hidvégi Gábor · 2013. Ápr. 8. (H), 19.58
Csak arra próbáltam rávilágítani, hogy nyugodtan visszarakhatják a www előtagot, egyszerűbb, mint ilyen átirányításokkal vacakolni; egyébként pedig a domain nem költözött.
18

Ajánáls

complex857 · 2013. Ápr. 8. (H), 20.18
Nos igen, csak rel="canonical" kevésbé "erősen" kommunikálja azt, hogy innentől a www alatt szeretnéd kiszolgálni ezt a tartalmat. Az rfc ajánlásai között külön kiemelik, hogy csak akkor használd ha a 301 nem megoldható. Anno még videó választ is megért a 301 vs canonical kérdés, ezért írtam, hogy tisztább-szárazabb érzés azt használni.
Illetve nem tudjuk, hogy pl. SEO mellett nem kell-e ügyfél "de én azt akarom ott fent látni hogy" kívánalmának is megfelelni.