奇怪的301redirect行为

301正在redirect,但它将旧url附加到新url的末尾,如下所示:

http://www.example.co.uk/new-dir/new-page/?/old-dir/old-page/

这是我的.htaccess

RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.co.uk [NC] RewriteRule ^(.*)$ http://www.example.co.uk/$1 [R=301,L] Redirect 301 /old-dir/old-page/ http://www.example.co.uk/new-dir/new-page/ RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L] 

不要使用mod_alias进行redirect; 他们没有按照您所期望的顺序进行操作,这取决于您将文件放入文件的顺序。 添加到redirect位置的查询string来自最后一个RewriteRule

replace您的Redirect行:

 RewriteRule ^old-dir/old-page/?$ http://www.example.co.uk/new-dir/new-page/ [R=301,L] 

这是假设您的htaccess上下文是文档根。