我使用codeigniter开发了一个网站。以前该网站有一个很长的网址结构,所以我在新网站上缩短了它们。
虽然我在htaccess中使用了redirect指令但它给出了404错误。我删除了所有旧的控制器和功能。
下面是htaccess的几行(有很多网址重定向到新的)
RewriteEngine On
# Redirect non-www urls to www
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]
#RewriteRule ^([^_]*)_(.*)$ /$1-$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
Redirect 301 /payments/charity_and_donations/paid http://www.mysite.com/charity
Redirect 301 /outwards/office_furniture/damaged http://www.mysite.com/office_assets
Redirect 301 /funding/business_and_person/inward http://www.mysite.com/funds
有人可以告诉我为什么它不是从旧的重定向到新的,我做错了什么?
答案 0 :(得分:1)
您需要将重定向发生在之前将URI路由到/index.php
。此外,由于Redirect
是mod_alias的一部分,而您的其他重定向/路由规则是mod_rewrite,因此当URI不应该处理时,它将被处理两次。您应该只使用mod_rewrite并将规则添加到开头:
RewriteEngine On
# Redirect non-www urls to www
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]
RewriteRule ^payments/charity_and_donations/paid http://www.mysite.com/charity [R=301,L]
RewriteRule ^outwards/office_furniture/damaged http://www.mysite.com/office_assets [R=301,L]
RewriteRule ^funding/business_and_person/inward http://www.mysite.com/funds [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
答案 1 :(得分:0)
尝试以下代码,这对我来说非常有效
RewriteCond %{HTTP_HOST} !^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [L,R=301]