我一直在检查,但我似乎找不到确切的语法来实现我正在尝试的目标。
我目前正在更新一个网站,但由于它在谷歌有很好的位置,我想保留所有的链接,但这次我想使用漂亮的网址。所以,我遇到的问题如下:
我有这个base-generales(通用规则)部分,我用它来重写:
RewriteRule ^bases-generales/ bases.php?locale=es_LA
我遇到的问题是当前(旧)文件名为bases.php,因此我希望用户直接从Google或其他链接打开bases.php时重定向到/ bases-generales /。
我现在使用的规则是:
RewriteRule /bases.php http://mysite/bases-generales/ [R=301,L]
现在,此命令会重定向,但唯一的问题是网址如下所示:
http://mysite/bases-generales/?locale=es_LA
另一个问题是它会导致重定向循环。
有关更多信息,这是完整的htaccess(当然,mysite是假的)
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
order deny,allow
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(mysite)(:80)? [NC]
RewriteRule ^(.*) http://mysite/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mysite/$1/ [L,R=301]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteBase /
RewriteRule ^/ index.php?locale=es_LA
RewriteRule ^bases-generales/ bases.php?locale=es_LA
RewriteRule ^condiciones/ condiciones.php?locale=es_LA
RewriteRule ^programa/ programa.php?locale=es_LA
RewriteRule ^premios/ premios.php?locale=es_LA
RewriteRule ^ganadores/ ganadores.php?locale=es_LA
RewriteRule ^patrocinadores/ patrocinadores.php?locale=es_LA
RewriteRule ^galeria/ galeria.php?locale=es_LA
RewriteRule ^contacto/ contacto.php?locale=es_LA
RewriteRule ^bases.php http://mysite/bases-generales/ [R=301,L]
答案 0 :(得分:0)
关于您的第一个请求,您必须将?
附加到新网址以防止Rewrite_mod添加查询字符串,因此该指令将
RewriteRule ^bases.php http://mysite/bases-generales/? [R=301,L]
2)您应该在重写规则中添加L
以停止处理网址:
RewriteRule ^bases-generales/ bases.php?locale=es_LA [L]
htaccess将是:
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
order deny,allow
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mysite/$1/ [L,R=301]
RewriteBase /
RewriteRule ^bases.php http://mysite/bases-generales/? [R=301,L]
RewriteRule ^sample2.php http://mysite/sample2/? [R=301,L]
RewriteRule ^bases-generales/ bases.php?locale=es_LA [L]
RewriteRule ^sample2/ sample2.php?locale=xx [L]