【发布时间】:2012-04-28 03:54:03
【问题描述】:
好的,我环顾四周,似乎找不到答案。
现在我不是要求你只给我一段代码,然后说“这就是修复”,我希望你解释一下你是如何做到的,你想出了什么等等。我真的很想了解更多,而学习的唯一方法就是通过例子。
现在我需要做的是:
目前我的博客(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 获得的 Preset url 参数是:
/details/
/register/
/city/
/search_process/
/login/
/logout-success/
/login-success/
/logout/
/login/
/manage/
/panel/
所以本质上..
localhost/hello-world/ 必须 301 重定向到 localhost/main/hello-world
和
localhost/(any-of-the-above)/ 必须不重定向到 /main/ 或 /blog/
另外,如果您在当前的 .htaccess 中注意到,我已经允许某些内容,例如 /admin/ /css/ /img/ /js/(/main/ 显然是博客)和 favicon.ico(因为它看起来很棒)
请教我! (你多久听到一次?:P)
劳伦斯·切罗内功劳归功!
他原本给我的答案,从那时到现在我想我第一次打错了,不小心丢了代码,第二次复制/粘贴后就不行了(因为第一次我实际上是打出来学习的)。
所以这里使用修改后的工作解决方案。我完全信任 Lawrence Cherone(这个问题的答案已被接受的人),因为他帮助我解决了这个问题,最终如果没有他,我无法获得这个可行的解决方案。再次感谢老兄!
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 上进行(这会从 code igniter 中的 url 中删除 index.php)
我不知道它为什么起作用,我只知道它起作用。但是我还没有完全测试它,但我相信能够在没有重定向的情况下访问 /css,您必须将 |css 添加到第一个 RewriteCond。但是,服务器无需这样做即可访问 css 文件。
【问题讨论】:
-
注意。在第一个 RewriteCond 中没有调节的任何 URL 都不起作用,将被发送到 /main/。所以localhost/choosefitness/css 将不起作用,因为它不在第一个 RewriteCond 中。其次,如果 URL 参数也不在第二个条件中,它不会被忽略,并且会针对 index.php 执行。因此,在第二个 RewriteCond 中没有 |css,但在第一个 RewriteCond 中拥有它,就像localhost/choosefitness/index.php/css 一样,并充当 Code Igniter 参数。
标签: php .htaccess http-status-code-301