代码之家  ›  专栏  ›  技术社区  ›  Utaal

apache mod ou rewrite:将^(.*)\.html$重写为$1.php,禁止直接访问^(.*)\.php$

  •  1
  • Utaal  · 技术社区  · 14 年前

    我的目的是将以.html结尾的URL重写为.php(实际上不是所有的URL,但对于这个问题来说,这并不重要)。我还想禁止以.php结尾的URL(这样用户只能使用扩展名为.html的URL访问每个页面)。

    我在里面使用这些规则。htaccess:

    RewriteRule ^(.*)\.php$ $1.html [R,L]
    RewriteRule ^(.*)\.html$ $1.php [L]
    

    但是,这会导致重定向循环。我想发生这种情况是因为重写.html到.php的url被反馈回mod重写并导致第一个规则触发。

    有人能帮我吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Tim Stone    14 年前

    我不确定这样做的好处是什么,假设您的链接URL只指向 .html 路径,但除此之外,重写的URL被反馈到 mod_rewrite . 在每个目录中使用它时,总是会发生这种情况( .htaccess )上下文,因为 MODY重写 必须将自己指定为请求处理程序,才能在Apache请求进程链的这个阶段正常工作。

    为了解决实际问题,您可以根据发送到服务器的原始请求调整第一个规则来解决问题。可以这样做:

    RewriteCond %{THE_REQUEST} ^[A-Z]+\s([^\s]+)\.php\s
    RewriteRule .* %1.html [R=301,L]
    
    RewriteRule ^(.*)\.html$ $1.php