【发布时间】:2014-08-06 16:53:18
【问题描述】:
我想永久重定向
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/ 部分是相同的。
我如何使用重写规则进行重写,并且考虑到人们可以转到example.com/event/title-goes-here 和example.com/event/title-goes-here/(因此带有斜杠),同时仍然正确地进行重定向.
编辑/更新
根据 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';
【问题讨论】:
标签: regex apache .htaccess mod-rewrite url-rewriting