0

我在将子文件夹重写回文件时遇到问题。

重定向有效,但不是最后一条规则。

这是我正在尝试做的事情:

domain.com/file.php?lang=fr

想将其重写回

domain.com/fr/file.php

无论文件在哪个文件夹中。

我只使用一种语言是法语。

RewriteCond %{QUERY_STRING} ^lang=([A-Za-z-]+)/?$ 
RewriteRule ^(.*)\.php$ %1/$1.php?  [NS,R=301,L] 
RewriteRule ^fr/(.*)\.php/?$ $1.php?lang=fr&redirect=no [QSA,L]

我当前的 htaccess 文件:

RewriteEngine On

RewriteBase /domain.com

RewriteCond %{QUERY_STRING} (^|&)lang=([A-Za-z-]+)(/?$|&)
RewriteCond %{QUERY_STRING} !(^|&)redirect=noneed($|&)
RewriteRule ^(.*)\.php$ %1/$1.php?  [NS,R=301,L]

RewriteRule ^fr/(.*)\.php/?$ http://localhost/?$1.php?lang=fr&redirect=noneed [QSA,L]
4

3 回答 3

0

第一条规则比第二条更强大,所以要解决你的问题,你必须在第一条写第二条。

于 2012-07-28T16:04:53.323 回答
0

为什么不使用这样的系统:

RewriteRule ^(fr|en|es)/(accueil|home|bienvenida)/$ /index.php?lang=$1&act=index[QSA,L]
于 2012-07-28T16:05:41.433 回答
0

尝试添加RewriteBase选项:

RewriteRule On
RewriteBase /

RewriteCond %{QUERY_STRING} ^lang=([A-Za-z-]+)/?$
RewriteRule ^(.*)\.php$ %1/$1.php?  [NS,R=301,L]

RewriteRule ^fr/(.*)\.php/?$ $1.php?lang=fr&redirect=no [QSA,L]

(或者如果您不希望该选项/在所有路径的开头附加 a)

此外,您似乎RewriteCond没有正确处理查询字符串,任何其他参数都会导致您的第一个规则失败。改为这样做(我仍在考虑):

RewriteRule On
RewriteBase /

RewriteCond %{QUERY_STRING} (^|&)lang=([A-Za-z-]+)(/?$|&)
RewriteCond %{QUERY_STRING} !(^|&)redirect=noneed($|&)
RewriteRule ^(.*)\.php$ %2/$1.php?  [NS,R=301,L]

RewriteRule ^fr/(.*)\.php/?$ $1.php?lang=fr&redirect=noneed [QSA,L]

于 2012-07-28T16:06:24.580 回答