非常先进.htaccess

时间:2012-04-16 19:42:08

标签: php .htaccess http-status-code-301

好的,我看了一下,我似乎无法找到答案。

现在我不是要求你给我一块代码,并说“这是修复”,我想请你解释一下你是怎么做的,你想出了什么,等等。我真的想知道更多关于这方面的知识,唯一的学习方法就是举例。

现在我需要做的是:

目前我的博客(word press go figure,因为他们拥有这个世界),是在根目录上。所以我的帖子看起来像是:http://localhost/hello-world。只是一个例子。

但是,我刚刚使用Code Igniter扩展了我的网站,使用自定义构建的PHP脚本。我需要将Code Igniter脚本放在根目录上,然后将博客移动到/ main /或/ blog /。我不想摆脱我的博客,但我不希望谷歌必须重新索引每一篇博文,或让谷歌导致糟糕的帖子网址。更重要的是,我不想坐在这里几个小时,为每一篇博文(数百篇)创建重定向网址。

现在我需要将重定向作为301重定向。

这是我遇到的问题。

我需要在.htaccess中使用它:

 RewriteEngine on
 RewriteCond $1 !^(index\.php|admin|css|img|js|main|favicon.ico)
 RewriteRule ^(.*)$ index.php/$1 [L]

这将删除丑陋的localhost / index.php / controller / controller-function /

但我需要让我的.htaccess重定向/但不是我已经拥有的预设网址上的所有内容。

我通过Code Igniter获得的预设网址是:

/details/
/register/
/city/
/search_process/
/login/
/logout-success/
/login-success/
/logout/
/login/
/manage/
/panel/

所以实质上......

localhost / hello-world /必须301重定向到localhost / main / hello-world

localhost /(以上任何一种)/不得重定向到/ main /或/ blog /

另外如果你注意到当前.htaccess,我允许某些东西,比如/ admin / / css / / img / / js /(/ main /显然是博客)和favicon.ico(因为它看起来很棒)

请上学! (你多久听到一次?:P)

CREDIT走向劳伦斯!

他最初给了我答案,从那时到现在我觉得我第一次写了一个拼写错误,并且意外丢失了代码,并且在复制/粘贴后第二次没有工作(导致第一次我实际上输入它来学习它。)

所以这里有修改后的工作解决方案。我完全赞同劳伦斯·切罗纳(那个对这个问题有接受答案的人),因为他帮我解决了这个问题,最终没有他就得到了这个有效的解决方案......再次感谢蓓蕾!

RewriteEngine on
RewriteCond $1 !(panel|manage)
RewriteRule ^(.*)$ http://localhost/choosefitness/main/$1 [R=301,L]

RewriteEngine on
RewriteCond $1 !^(index\.php|admin|css|img|js|less|favicon.ico)
RewriteRule ^(.*)$ index.php/$1 [L]

这简单地说明,只要第一个参数http://localhost/choosefitness/first-argument不是/ panel或/ manage。它应该301重定向到/ main /(必须提供301重定向的完整URL,而不仅仅是main / $ 1)

然后它声明应该忽略对admin css img js lss或favicon.ico发出的任何请求。 else应该在index.php上进行(这会从代码点火器的url中删除index.php)

我不知道它为什么会起作用我知道它确实如此。但是我没有完全测试它,但我相信能够访问/ css而没有beign重定向,你必须添加| css到第一个RewriteCond。但是,服务器无需访问css文件即可。

1 个答案:

答案 0 :(得分:2)

这是未经测试的&非常确定index.php/$1/$2是错误的但是......您可以包含符合CI规则的规则,然后传递给CI控制器,如果找不到匹配,则重写为/blog/网址。也别忘了逃避。在favicon\.ico部分。

RewriteEngine on
RewriteCond $1 !^(index\.php|admin|css|img|js|main|favicon\.ico)

RewriteRule ^(details|register|city|search_process|login|logout-success|login-success|logout|login|manage|panel)/(.*)$ index.php/$1/$2 [L]
RewriteRule ^(.*)$ /blog/$1 [L]

编辑:如果您的参数位于前面,则将规则切换为如下所示:

RewriteRule ^(.*)/(details|register|city|search_process|login|logout-success|login-success|logout|login|manage|panel)$ index.php/$1/$2 [L]