.htaccess从特定文件重定向到已定义的重写文件

时间:2013-04-22 23:18:25

标签: .htaccess mod-rewrite redirect

我一直在检查,但我似乎找不到确切的语法来实现我正在尝试的目标。

我目前正在更新一个网站,但由于它在谷歌有很好的位置,我想保留所有的链接,但这次我想使用漂亮的网址。所以,我遇到的问题如下:

我有这个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]

1 个答案:

答案 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]