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

时间:2015-09-23 17:57:36

标签: php .htaccess url-rewriting rewrite url-routing

我正在构建简单的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=$3&lang=$1 [C]
RewriteRule ^(.+)$ index.php?url=$1 [C]

我的目标是在多语言网站上添加http://example.com/lang/something这样的地址,我将其用作mvc骨架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时,我在第一种情况下看不到这里错误已经到位因为app认为“ en“是控制者,但在第二种情况下是什么?

1 个答案:

答案 0 :(得分:1)

重写条件仅适用于下一个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=$2&lang=$1 [L,QSA]

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