.htaccess 将根目录中的html文件重写到目录

.htaccess 将根目录中的html文件重写到目录,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,嗨,我需要一些帮助。 问题: 我现在已经使用CMS使我的站点成为多语言站点,它在index.php中处理所有内容 我试图重定向从根目录访问的所有.html页面,如 我想把它重定向到 然后,第二个重定向将解析该信息,并将其发送到index.php,然后index.php将提供正确的页面 现在,我收到太多重定向错误 # The Friendly URLs part RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME

嗨,我需要一些帮助。 问题: 我现在已经使用CMS使我的站点成为多语言站点,它在index.php中处理所有内容 我试图重定向从根目录访问的所有.html页面,如

我想把它重定向到

然后,第二个重定向将解析该信息,并将其发送到index.php,然后index.php将提供正确的页面

现在,我收到太多重定向错误

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*\.html)$ en/$1\.html [R=301,L]
RewriteRule ^(en|ru)?(\/)?(.*)$ index.php?c=$1&q=$3 [L,QSA]
我做错了什么

谢谢

(.*\.html)
不够具体,因此也匹配
/en/englishpage.html
。它还不断地在末尾添加
.html

所以
/englishpage.html
重定向到
/en/englishpage.html.html
,它重定向到
/en/en/englishpage.html.html

要解决这两个问题,请执行以下操作:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)\.html$ en/$1\.html [R=301,L]

RewriteRule ^((en|ru)/)?(.*)$ index.php?c=$1&q=$3 [L,QSA]

PS不需要逃避一个很难说的问题。你说“
http://www.website.com/englishpage.html
我想将其重定向到
http://www.website.com/en/englishpage.html
“但是,您的重写规则说明了另一件事。因此,请给出一些真实的URL示例。例如:
http://www.website.com/englishpage.html
http://www.website.com/index.php?page=englishpage.html&whatever=whatever
这些规则不是猜测需要什么的好方法,特别是当它们不起作用的时候。很抱歉不清楚。本质上,我使用的CMS将根据两个变量获取正确的内容:上下文和查询。上下文部分在请求的明显目录中表示,如/en/表示英语和/ru/表示俄语。查询的其余部分是页面名称/别名。所以像这样的请求实际上意味着希望澄清它:)谢谢你的帮助谢谢你Gerben,它有帮助:)我仍然使用这行:
RewriteRule^(en|ru)?(\/)?(.*)$index.php?c=$1&q=$3[L,QSA]
来让它工作,出于某种原因,你建议它将所有请求转发到/ru/as:
RewriteRule:
^([^/]+)\.html$en/$1\.html[R=301,L]
它工作得很好。但是由于一些奇怪的原因,所有其他静态请求都被破坏了,比如css/js,它会干扰它们。但我认为你让我走上了正确的轨道。我会随时向你通报。谢谢你,我感谢你的帮助。最后,它开始工作了,只是稍微调整了一下你给我的:
重写规则^([^/]+)\.html$en/$1.html[R=301,L]
RewriteRule^((en|ru))/?(.*)$index.php?c=$1&q=$3[L,QSA]
我还使用这个网站来测试我的代码,让我的生活更轻松:)