我在工作中使用Code Igniter项目时学到了一些关于MVC的知识,所以我正在努力实现这个目标:
在: 的index.php somepage.php secondpage.php
所有这些文件都有“include(header)和include(footer)等等......
相反,我想从网址中捕获用户正在寻找的页面 - >将它们重定向到索引,并始终在该位置加载页眉和页脚,唯一改变的是内容。
所以我用我的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中/ /之间的任何单词,并将它们作为参数传递给索引。你们知道是否有任何智能重写规则实际上忽略了文件存在时的重写?
答案 0 :(得分:1)
RewriteCond
应用于下一个,在您的情况下,第一个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路径的开头和非贪婪版本.*?
,这使得捕获在第一个斜杠处停止。
答案 1 :(得分: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>