1

我从工作中的 Code Igniter 项目中学到了一些关于 MVC 的知识,所以我正在努力做到这一点:

之前:index.php somepage.php secondpage.php

所有这些文件都有“include(header)和include(footer)等等......

相反,我想从 url 捕获用户正在寻找的页面 - >将它们重定向到索引,并始终在该位置加载页眉和页脚,唯一改变的是内容。

所以我用我的 htaccess 做到了这一点:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteCond %{SCRIPT_FILENAME} !-f
   RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/(.*) index.php?page=$1&child=$2&grandchild=$3&cousin=$4&aunt=$5&uncle=$6 [NC,QSA,L]
   RewriteRule (.*)/(.*)/(.*)/(.*)/(.*) index.php?page=$1&child=$2&grandchild=$3&cousin=$4&aunt=$5 [NC,QSA,L]
   RewriteRule (.*)/(.*)/(.*)/(.*) index.php?page=$1&child=$2&grandchild=$3&cousin=$4 [NC,QSA,L]
   RewriteRule (.*)/(.*)/(.*) index.php?page=$1&child=$2&grandchild=$3 [NC,QSA,L]
   RewriteRule (.*)/(.*) index.php?page=$1&child=$2 [NC,QSA,L]
   RewriteRule (.*^.css) index.php?page=$1 [NC,QSA,L]
</IfModule>

有了心态,如果它有效,那就是一个开始..但它不起作用。首先我注意到我的css没有加载..显然 -f 没有帮助所以我添加了规则,但是 /img/bg.png 也不起作用..

我希望很明显我正在尝试捕获 URL 中 / / 之间的任何单词,并将它们作为参数传递给索引。你们知道如果文件存在,是否有任何智能重写规则实际上忽略重写?

4

2 回答 2

1

RewriteConds 仅应用于下一个,在您的情况下是第一个RewriteRule。如果你想为每个 RewriteRule 使用它,你必须复制它

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*?)/(.*?)/(.*?)/(.*?)/(.*?)/(.*?) index.php?page=$1&child=$2&grandchild=$3&cousin=$4&aunt=$5&uncle=$6 [QSA,L]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*?)/(.*?)/(.*?)/(.*?)/(.*) index.php?page=$1&child=$2&grandchild=$3&cousin=$4&aunt=$5 [QSA,L]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*?)/(.*?)/(.*?)/(.*?) index.php?page=$1&child=$2&grandchild=$3&cousin=$4 [QSA,L]
...

此处不需要该[NC]标志,因为该模式不包含任何字母字符。

我还稍微修改了模式,^用于 URL 路径的开头和非贪婪版本.*?,这使得捕获在看到的第一个斜杠处停止。

于 2013-04-09T21:29:02.960 回答
0

我改变了我的逻辑。我现在检测哪个页面,并将其余页面保存到变量设置中,这仅适用于 thr ?按照您的建议,在 .* 之后:

最终当前解决方案:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteCond %{SCRIPT_FILENAME} !-f
   RewriteRule ^(.*?)/(.*) index.php?page=$1&settings=$2 [QSA,L]

   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteCond %{SCRIPT_FILENAME} !-f
   RewriteRule ^(.*) index.php?page=$1 [QSA,L]
</IfModule>
于 2013-04-09T19:53:26.613 回答