我为我的multil找到了以下.htaccess
文件。项目。
但是我有一些问题无法解决。
目标是重写网址,例如从:
/en/prod/index.php
到
/prod/index.php?lang=en
这必须适用于每个文件夹,不仅适用于prod。
有时,?
之后链接已经有了一些变量,因此重写规则应检测到此?
并将其更改为&
。
使用我的代码,我可以用?
替换&
,但如果不存在?
,这也适用!
第二个(和MAIN )问题:
如果文件存在(在我之前的示例中)/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]
答案 0 :(得分:1)
尝试:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(it|en)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/%2 -d
RewriteRule ^(it|en)/(.*)$ /$2?lang=$1 [L,QSA]
RewriteCond %{REQUEST_URI} ^/(it|en)/(.*)$
RewriteCond %{DOCUMENT_ROOT}/%2 !-f
RewriteCond %{DOCUMENT_ROOT}/%2 !-d
RewriteRule ^(it|en)/(.*)$ /index.php?lang=$1 [L,QSA]
答案 1 :(得分:1)
您可以使用以下通用规则:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/$2 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/$2 -d
RewriteRule ^([a-z]{2})/(.+)$ /$2?lang=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]