我无法将子文件夹重写回文件。
重定向有效但不是最后一条规则。
这是我想要做的事情:
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]
答案 0 :(得分:0)
第一条规则比第二条更强大,所以要解决你的问题,你必须在第一名写下第二条。
答案 1 :(得分:0)
为什么不使用这样的系统:
RewriteRule ^(fr|en|es)/(accueil|home|bienvenida)/$ /index.php?lang=$1&act=index[QSA,L]
答案 2 :(得分: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]
(或者,如果您不希望该选项在所有路径的开头附加/
)
此外,您的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]