我想永久重定向
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
等),因为/ event / part是相同的。
如何使用重写规则进行重写,同时考虑到人们可以转到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而在我的routing.php中有下面列出的路由选项(不知道这是否重要)。认为这纯粹是一个.htaccess的事情,但是当我想到路由文件时,我认为这可能会因重写而混乱?
$route['event/jazz/(:any)'] = 'event/view/$1';
$route['(:any)'] = 'pages/view/$1';
答案 0 :(得分:0)
是的,它会循环,因为源和目标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]