/ / htaccess правило перезапису закінчується нескінченним циклом - regex, apache, .htaccess, mod-rewrite, ur-переписування

правило перезаписання htaccess закінчується в нескінченному циклі - regex, apache, .htaccess, mod-rewrite, url-rewriting

Я хотів би назавжди переадресувати

www.example.com/event/title-goes-here до www.example.com/event/jazz/title-goes-here

з регулярним виразом у моєму файлі htaccess.

У мене зараз є:

RewriteEngine on
RewriteRule ^event/(.*)$ http://www.example.com/event/jazz/$1 [R=301,L]

Але це призводить до нескінченного циклу (це іде до example.com/event/jazz/jazz/jazz/jazz тощо), оскільки / подія / частина однакова.

Як я можу використовувати правило переписати, щоб зробити це перезапис, а також таким чином, щоб воно врахувало, що люди можуть перейти до example.com/event/title-goes-here І example.com/event/title-goes-here/ (так із кінцевою косою рисою), але все ще правильно роблять переадресацію.

EDIT / UPDATE

На основі відповіді anubhava мій повний файл .htaccess виглядає приблизно так (забув згадати там "також переписати на index.php):

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
RewriteRule ^event/([^/]+)/?$ /event/jazz/$1 [R=301,L,NC,NE]

Також забув згадати, що я використовую CodeIgniter іу моєму маршруті.

$route["event/jazz/(:any)"] = "event/view/$1";
$route["(:any)"] = "pages/view/$1";

Відповіді:

0 для відповіді № 1

Так, це буде циклічно, тому що вихідні та цільові URI відповідають обох моделям регулярних виразів.

Використовуйте це правило, щоб виправити це:

RewriteEngine on

RewriteRule ^event/([^/]+)/?$ /event/jazz/$1 [R=301,L,NC,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php/$0 [PT,L]