我正在尝试为使用Phalcon Framework构建的网站设置301重定向。
我的重定向工作正常,但是在重定向后它会在旧网址后附加?_url=
。
以下是.htaccess
中的Phalcon框架附带的内容:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
当用户访问http://example.net/fr/le-circuit/a-propos
时,它会重定向到http://example.net/fr/circuit?_url=/fr/le-circuit/a-propos
正如您所看到的,?_url=
是我要删除的额外内容。
这是我没有重定向的.htaccess
:
AddDefaultCharset UTF-8
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirection for old website links
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ /fr/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [L,R=301]
RewriteRule ^$ /fr/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>
我尝试了以下重定向指令before
和after
Phalcon附带的默认重写规则。
Redirect 301 /fr/le-circuit/a-propos /fr/circuit
我认为我的第一次尝试不够严格所以我决定使用正则表达式和RedirectMatch:
RedirectMatch 301 ^/fr/le-circuit/a-propos/?$ /fr/circuit
就像以前一样,我在Phalcon附带的规则之前和之后尝试过,并且在重定向之后附加了旧的URL。
我尝试在重定向中对网址进行硬编码,以查看?_url=
是否仍然会附加,并且......是的。
RewriteMatch 301 ^/fr/le-circuit/a-propos/?$ http://example.net/fr/circuit
有没有人知道这个问题,或者知道为什么它会在重定向后附加旧网址?
答案 0 :(得分:2)
在其他规则之前保留重定向规则:
RewriteEngine On
# Redirection for old website links
RewriteRule ^fr/le-circuit/a-propos/?$ http://example.net/fr/circuit [L,NC,R=301]
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ /fr/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [L,R=301]
RewriteRule ^$ /fr/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
确保在测试此更改时清除浏览器缓存。
答案 1 :(得分:0)
确保在使用301永久重定向时清除缓存。始终将它们调试为302临时重定向。当您在.htaccess文件中注释掉重定向时,请确保缓存清除可防止重定向发生。完成后,您可以尝试以下建议:
使用引导程序中的REQUEST_URI完全抛弃“_url”:
使用RewriteRule .* index.php [L]
代替:RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
然后在index.php bootstrap中使用这一行:
echo $application->handle(strtok($_SERVER["REQUEST_URI"],'?'))->getContent();
而不是echo $application->handle()->getContent();
默认处理$_GET['_url']
。