我的.htaccess目前看起来像:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+([^/]+)/\?lang=([^\s&]+) [NC]
RewriteRule ^ /%2/%1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z]{2})/([^/]+)/?$ $2/?lang=$1 [L,QSA]
这意味着example.com/{lang}/some-page.php
充当example.com/some-page.php?lang={lang}
剩余问题:example.com/{lang}
不起作用,除非index.php
像`example.com/ {lang} /index.php
当我们直接转到example.com/{lang}
时,如何才能使其发挥作用?
答案 0 :(得分:1)
这个怎么样:
RewriteEngine On
RewriteCond %{ENV:REDIRECT_rewritten} !=1
RewriteCond %{QUERY_STRING} ^lang=([a-z]{2})$ [NC]
RewriteRule ^([^/]*)$ /%1/$1? [R=301,L]
RewriteCond %{REQUEST_URI} !^/js/
RewriteRule ^([a-z]{2})(?:/([^/]+))?$ $2?lang=$1 [NC,L,QSA,E=rewritten:1]
我真的不喜欢匹配THE_REQUEST所以改变了。这也会重定向您可能不想要的/?lang=xx
。我在两个你可能不想要的规则中对lang字符串使用了相同的匹配。让我知道。
不确定是否需要文件或目录存在检查,如果没有必要,它会减慢速度,因为必须在每个请求上轮询两次文件系统。你在root中有两个字母文件或目录吗?