我有一个网站,让我们说www.example.com
,但这曾经是www.example.nl
。来自www.example.nl
的所有流量现在都被重定向到www.example.com
,但是当我们更改了一些命名约定时,www.example.nl/seeds
现在必须重定向到www.example.com/nl/flower-seeds
。
我得到的.htaccess
文件包含以下代码:RewriteEngine On
RewriteBase
RewriteCond %{HTTP_HOST} !example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L, R=301]
Redirect 301 /seeds/(.*) example.com/nl/flower-seeds/$1
当我导航到www.example.nl/seeds/
时,我最终在www.example.com/seeds/
结束了404,因为我错过了/nl/flower-
部分。
我认为当RewriteRule已经改变了URL时,Redirect无法正常工作。你会如何解决这个问题?任何帮助表示赞赏!
你应该排除/seeds/
目录形式这样的一般规则:
RewriteEngine On
RewriteCond %{HTTP_HOST} !example.com$ [NC]
RewriteCond %{REQUEST_URI} !/seeds/(.*)
RewriteRule ^(.*)$ http://www.example.com/$1 [L, R=301]
RewriteCond %{HTTP_HOST} !example.com$ [NC]
RewriteRule ^seeds/(.*)$ http://www.example.com/nl/flower-seeds/$1 [L, R=301]
注意:清除浏览器缓存然后测试
另外,不要像你所做的那样使用正则表达式重定向:
Redirect 301 /seeds/(.*) example.com/nl/flower-seeds/$1
这里(.*)
没有任何意义,你可以使用RedirectMatch or RewriteRule