【问题标题】:Rewrite rules doesn't work apache 1.3重写规则不起作用apache 1.3
【发布时间】:2010-05-01 14:52:00
【问题描述】:

我正在使用一些以前在 apache2 上始终有效的重写指令,但现在尝试新的共享主机并且重写规则似乎没有得到应用。

我已将 .htaccess 文件简化为以下基本规则:

RewriteEngine On
Rewritebase /demo/

RewriteRule ^(.*)$ index.php/$1 [L]

如您所见,我想从根目录重写每个请求到演示文件夹中的 index.php 文件。

因此,对于标准 MVC 设置,http://www.example.com/demo/index.php 应该处理像 http://www.example.com/demo/albums/show/1 这样的所有内容。 (顺便说一句,我正在使用 CodeIgniter)

上面的指令导致 500 错误,所以我想可能是因为 1.3 和 2.x 之间可能存在一些语法差异。

经过一些跟踪和错误编辑,我发现重写规则本身有问题,但我真的不明白为什么。

  • 关于为什么我的重写规则不起作用的任何想法?以前在许多不同的服务器上都这样做过。
  • 建议如何解决?

注意:mod_rewrite 确实有效,我已经写了一个小测试来确定。

【问题讨论】:

    标签: apache mod-rewrite apache-1.3


    【解决方案1】:

    在你的位置上,我可能会先查看 Apache 错误日志,然后尝试通过这样做来消除一个移动部分

    RewriteEngine On
    RewriteRule ^/demo/index.php$ /demo/index.php [L]
    RewriteRule ^/demo/(.*)$ /demo/index.php/$1 [L]
    

    如果可行,我会尝试重新引入 RewriteBase。

    【讨论】:

    • 谢谢,好的提示,我已经删除了 RewriteBase 指令,这会导致根 .../demo/ 的 200 响应,但任何其他结果都会导致来自 apache 的普通旧 404(不是从我的日志中可以看出,由我的脚本处理)。
    • 我在上面添加了一个 RewriteRule 以避免意外重写。有一种方法可以使用 RewriteCond 来做到这一点,但这需要喝咖啡。
    【解决方案2】:

    你设置了吗:

    Options +FollowSymLinks
    

    ……在重写规则之前?如果FollowSymLinks 被禁用,mod_rewrite 将不起作用。

    【讨论】:

      【解决方案3】:

      这可能是因为index.php/… 也与^(.*)$ 匹配,因此您遇到了无限递归。所以试着排除你的目标:

      RewriteCond $1 !^index\.php/
      RewriteRule ^(.*)$ index.php/$1 [L]
      

      【讨论】:

        猜你喜欢
        • 2014-02-02
        • 1970-01-01
        • 2017-08-31
        • 2015-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        相关资源
        最近更新 更多