htaccess的重写规则在一个无限循环结束(htaccess rewrite rule ends

2019-10-20 15:13发布

我想永久重定向

www.example.com/event/title-goes-herewww.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-hereexample.com/event/title-goes-here/ (因此以斜线),同时仍然正确地使重定向。

编辑/ 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]

还忘了提我使用笨,在我routing.php有下列路由选项(不知道是不是这个问题)。 认为这是一个纯粹的.htaccess的事情,但是当我想到我盘算了一下路由文件也许这个食堂与重写?

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

Answer 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]


文章来源: htaccess rewrite rule ends in an infinite loop