我为我的multil找到了以下.htaccess
文件。项目。 但是有一些问题我无法解决。使用htaccess和多语言网站的重写规则
目标是重写URL,例如来自:
/en/prod/index.php
到
/prod/index.php?lang=en
这必须为每个文件夹,而不是只为督促。 有时链接在?
之后已经有一些变量,所以重写规则应该检测到这个?
并将其更改为&
。 使用我的代码,我可以用&
代替?
,但是如果没有?
存在,这也适用!
二(和主要)问题: 如果文件存在(在我前面的例子)/prod/index.php
然后在浏览器应该显示此页,但如果文件不存在,所有的请求应该被重定向到index.php
。
随着我的代码请求是总是重定向,因为该文件不对应的链接,所以条件不匹配。
谢谢你的帮助!
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteCond %{QUERY_STRING} ^(\??)(.*)$ [NC]
RewriteCond %{REQUEST_URI} ^/(it|en)/(.*)$ [NC]
#is it possible here to have %3 instead of rewriting (it|en)? Does not work...
RewriteRule ^(it|en)/(.*)$ /%3/$2?lang=%3&%2 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.*$ index.php [NC,L]
谢谢!你能否在'%{DOCUMENT_ROOT}'之后更好地向我解释'%2'? “RewriteRule”的第一部分不能包含像'%1'或'$ 1'这样的变量以避免重复'(it | en)'? – Perocat
@Perocat试图确定'%{REQUEST_URI}'行中的匹配组“(。*)”是否存在。 –
谢谢!因此它检查是否存在'DOCUMENT_ROOT/files/file.php'成为'DOCUMENT_ROOT/files/file.php'(其中'$ 2'是从'(。*)中取得的'files/file.php') '在第一个RewriteCond中的'/(it | en)/'之后)? – Perocat