我正在使用.htaccess
重定向
http://www.example.com/foo/
到
http://www.example.com/foo/bar
这是我的代码:
redirect 301 /foo/ http://www.example.com/foo/bar
然而,这会产生反馈回路,例如
http://www.example.com/foo/barbarbarbarbarbar
等。
我试过在它周围放置分隔符:
redirect 301 ^/foo/$ http://www.example.com/foo/bar
但是重定向根本就没有发生。我可能错过了一些非常简单的语法点。有任何想法吗?感谢。
修改
这是我的(差不多)完整的.htaccess
文件:
RewriteEngine On
RewriteBase /
# Canonical is www version
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
#redirect => http unless special page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/(javascripts|images|library|stylesheets)
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#redirect => https for special pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# send to router
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]
答案 0 :(得分:1)
这取决于您希望使用重定向公开的资源是什么。 它是文件还是目录。
如果你要在bar下公开一个目录,你应该尝试:
RedirectMatch 301 ^/foo/ http://www.example.com/foo/bar/
如果要重定向到文件,则应使用以下语法:
redirect 301 /foo http://www.example.com/foo/bar
您可以看到此post了解更多信息
答案 1 :(得分:1)
你的规则如下:
RewriteEngine On
RewriteBase /
# Canonical is www version
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
#redirect => http unless special page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} !/(javascripts|images|library|stylesheets)
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#redirect => https for special pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTPS} off
RewriteRule !^index\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^foo/?$ /foo/bar [L,NC,R=301]
# send to router
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
请确保在新浏览器中测试此内容或在测试前清除浏览器缓存。
答案 2 :(得分:0)
您可以使用passthrough而不是使用重定向。
RewriteRule ^/foo$ /foo/bar [PT]
答案 3 :(得分:0)
有关您的信息,这实际上取决于您的托管服务提供商。它可能位于Load Balancer后面,并且您没有正确的env var集(如HTTPS和其他...)。
在我的情况下(Infomaniak),没有任何实际工作,我得到了无限的重定向循环。
为Infomaniak执行此操作的正确方法是actually explained in their support site:
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://your-domain.com/$1 [R=301,L]
因此,请务必咨询您的托管服务提供商。希望他们有一篇文章解释如何做到这一点。否则,只需询问支持。