.htaccess 忽略标志,不匹配下一条规则

.htaccess ignoring flags, not matching next rule

我正在构建简单的 php mvc 应用程序,但是 .htaccess 有问题,看起来它忽略了标志并且不想 运行 下一行

Options -MultiViews
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l


RewriteRule ^(en|sk)(\/)(.+)$ index.php?url=&lang= [C]
RewriteRule ^(.+)$ index.php?url= [C]

我的目标是拥有多语言网站,地址像 http://example.com/lang/something, I used this as mvc skeleton link to github repo 但它运行不正常

http://127.0.0.10的时候,一切正常 转到 http://127.0.0.10/en/home 页面时也有效 转到 http://127.0.0.10/home 页面时无法正常工作

然后当我删除第一个规则或交换规则顺序时,转到 http://127.0.0.10/home 开始工作,但是当转到 http://127.0.0.10/en/home 时没有,我不明白第一种情况这里错误是因为应用程序认为 "en" 是控制器,但在第二种情况下呢?

重写条件仅适用于紧接的下一个 RewriteRule,因此第二个 RewriteRule 没有任何条件。

试试这个代码:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

RewriteRule ^(en|sk)/(.+)$ index.php?url=&lang= [L,QSA]

RewriteRule ^(.+)$ index.php?url= [L,QSA]