Я хотів би назавжди переадресувати
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]