/ / Presmerovanie v htaccess pridáva adresár na novú URL; nepresmerovanie URL ExpressionEngine správne - .htaccess, mod-prepísať, presmerovať, indexovať, expressionengine

Presmerovanie v htaccess pridáva adresár do novej adresy URL. nie správne presmerovanie adresy URL výrazov ExpressionEngine - .htaccess, mod-rewrite, redirect, indexing, expressionengine

Snažím sa nastaviť pravidlo presmerovania pre nový web ExpressionEngine.

Používam nasledujúci kód umiestnený na mojich stránkach .htaccess súbor (posledná časť je odstrániť index.php z URL ExpressionEngine - toto dielo):

<IfModule mod_rewrite.c>
RewriteEngine On

RedirectMatch 301 ^/2010/example/*$ http://sub.domain.com/new-page/$1

# Removes index.php from ExpressionEngine URLs
RewriteCond $1 !.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

Stáva sa presmerovanie typu, ale adresa URL, ktorú dostanem, je táto:

http://sub.domain.com/new-page2010/example/

Skúšal som rôzne kombinácie a poháňa ma to po stenu !! Nejaké tipy na to, kde sa mýlim?

odpovede:

1 pre odpoveď č. 1

Syntax pre Apache Smernica RedirectMatch očakáva použitie zátvoriek v RegEx:

Poskytnutý regulárny výraz sa porovná s cestou URL a ak sa zhoduje, server nahradí všetky parentezizované zhody do daného reťazca.

Použitie a RedirectMatch je ekvivalentná presmerovanie, ale namiesto jednoduchého porovnávania s predponou využíva štandardné regulárne výrazy.

Opravou vášho príkladu by teda platná smernica RedirectMatch bola:

RedirectMatch 301 ^/2010/example/(.*)$ http://sub.domain.com/new-page/$1

Môžete využiť všetky možnosti prepisovacieho motora Apache pomocou a RewriteRule miesto:

RewriteRule ^2011/example/(.*)$ http://sub.domain.com/new-page/$1 [R=301,L]

V závislosti od toho, čo chcete presmerovať - ​​jednu stránku verzus celý podadresár - možno budete musieť v každom príklade zmeniť pôvodnú cestu URL.