Vra

Probleem

Ek moet 'n paar kort geriefs-URL's na langer werklike URL's herlei.Die betrokke werf gebruik 'n stel subdomeine om 'n stel ontwikkelings- of regstreekse weergawes te identifiseer.

Ek wil graag hê dat die URL waarna sekere versoeke herlei word die HTTP_HOST insluit sodat ek nie 'n pasgemaakte .htaccess-lêer vir elke gasheer hoef te skep nie.

Gasheerspesifieke voorbeeld (uit .htaccess-lêer geknip)

Redirect /terms http://support.dev01.example.com/articles/terms/

Hierdie voorbeeld werk goed vir die ontwikkelingsweergawe wat by dev01.example.com loop.As ek dieselfde reël in die hoof-.htaccess-lêer gebruik vir die ontwikkelingsweergawe wat onder dev02.example.com loop, sal ek uiteindelik na die verkeerde plek herlei word.

Ideale reël (nie seker van die korrekte sintaksis nie)

Redirect /terms http://support.{HTTP_HOST}/articles/terms/

Hierdie reël werk nie en dien bloot as 'n voorbeeld van wat ek graag wil bereik.Ek kon dan presies dieselfde reël onder baie verskillende gashere gebruik en die korrekte resultaat kry.

Antwoorde?

  • Kan dit gedoen word met mod_alias of vereis dit die meer komplekse mod_rewrite?
  • Hoe kan dit bereik word met behulp van mod_alias of mod_rewrite?Ek sou 'n mod_alias oplossing verkies indien moontlik.

Verduidelikings

Ek bly nie op dieselfde bediener nie.Ek wil graag:

Ek wil graag dieselfde reël in die .htaccess-lêer op beide example.com en dev.example.com kan gebruik.In hierdie situasie sal ek na die HTTP_HOST as 'n veranderlike moet kan verwys eerder as om dit letterlik te spesifiseer in die URL waarna versoeke herlei word.

Ek sal die HTTP_HOST-parameter ondersoek soos voorgestel, maar het gehoop op 'n werkende voorbeeld.

Was dit nuttig?

Oplossing

Dit is vreemd dat niemand die werklike werk antwoord gedoen het (lol):

RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]

Om jou te help om die werk vinniger, my gunsteling instrument om te kyk vir regexp:

http://www.quanetic.com/Regex (moenie vergeet om ereg kies ( POSIX) in plaas van Preg (PCRE)!)

Jy gebruik hierdie instrument wanneer jy die URL na te gaan en te kyk of hulle geldig is of nie.

Ander wenke

Ek dink jy wil die HTTP_HOST waarde te vang en dan gebruik dit in die herschrijfregel:

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/terms http://support.%1/article/terms [NC,R=302]

As ek jou vraag reg verstaan, wil jy 'n 301-aanstuur hê (sê vir blaaier om na ander URL te gaan).As my oplossing nie die regte een vir jou is nie, probeer hierdie hulpmiddel: http://www.htaccessredirect.net/index.php en vind uit wat vir jou werk.

//301 Redirect Entire Directory
RedirectMatch 301 /terms(.*) /articles/terms/$1

//Change default directory page
DirectoryIndex 

Volgens hierdie Cheat Heet ( http: //www.addedbytes com / aflaai / mod_rewrite-kul-blad-v2 / png / ) dit moet werk

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1

Let wel dat ek nie 'n manier om te toets hierdie so dit moet gesien word as 'n wyser in die regte rigting in teenstelling met 'n eksplisiete antwoord het.

As jy 'n verblyf op dieselfde bediener dan sit dit in jou htaccess sal ongeag die bediener te werk:

RedirectMatch 301 ^/terms$ /articles/terms/

Produseer:

http://example.com/terms -> http://example.com/articles/terms

of

http://test.example.com/terms -> http://test.example.com/articles/terms

Dit is duidelik dat jy nodig het om die regex bypassende pas en dies meer om seker te maak dit is middels met wat jy gaan om te gooi na dit. Dieselfde geld vir die 301, wat jy dalk wil 'n 302 as jy nie blaaier wil die aanstuur kas.

As jy wil:

http://example.com/terms -> http://server02.example.com/articles/terms

Dan sal jy nodig het om die parameter HTTP_HOST gebruik.

Jy hoef nie hierdie inligting in te sluit. bied net 'n URI relatief tot die wortel.

Redirect temp /terms /articles/terms/

Dit word verduidelik in die mod_alias dokumentasie :

  

Die nuwe URL moet 'n absolute URL begin met 'n skema en masjien naam, maar 'n URL-pad begin met 'n streep kan ook gebruik word, in welke geval die skema en masjien naam van die huidige bediener sal bygevoeg word.

Dit klink soos wat jy regtig nodig het, is net 'n alias?

Alias /terms /www/public/articles/terms/
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top