2

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

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

我有这个 bases-generales (general-rules) 部分,我用它来重写:

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]

现在,这个命令会重定向,但唯一的问题是 url 看起来像这样:

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]
4

1 回答 1

0

关于您的第一个请求,您必须附加?到新的 url 以防止 Rewrite_mod 添加查询字符串,因此该指令将是

RewriteRule     ^bases.php    http://mysite/bases-generales/? [R=301,L]

2)您应该添加L到您的重写规则以停止处理 url:

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]
于 2013-04-22T23:27:37.183 回答