我一直在尝试为最近移动的网页设置重定向。该页面最初位于http://example.com/foo/
,但此后已移至http://example.com/foo/bar/
。
我在我的网站.htaccess
文件中尝试了以下规则:
RedirectMatch 301 ^/foo/$ /foo/bar/
但是,转到网址http://example.com/foo/
会导致重定向到网址http://example.com/foo/bar/?/foo/
。虽然url工作,我想要重定向到加载的页面,但我还是想在网址的末尾删除额外的?/foo/
。
这是我的全部.htaccess:
RewriteEngine On
RewriteBase /
# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [R=301,L]
# allow access to certain directories in webroot
RewriteCond $1 !^(index\.php|robots\.txt|css/|lib/|js/|images/|^(.*)/images)
# gets rid of index.php
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# page redirects
RedirectMatch 301 ^/foo/$ /foo/bar/
答案 0 :(得分:4)
在RewriteRrule
文件解决问题后,在.htaccess
的顶部添加RewriteBase /
。
RewriteRule ^foo/$ /foo/bar [R=301,L]
答案 1 :(得分:0)
我发现从控制器而不是.htaccess重定向更容易,因为.htaccess最后添加了一个查询字符串。
例如,我已将此信息放入我的控制器操作中:
if ($this->uri->segment(2)==='old_url') {
redirect(base_url() . $this->lang->lang() .'/new-url', 'location', 301);
}