【问题标题】:.htaccess: rewrite .htm urls internally to .php, but also redirect .php urls to .htm.htaccess:在内部将 .htm url 重写为 .php,但也将 .php url 重定向到 .htm
【发布时间】:2011-06-03 03:23:53
【问题描述】:

我有一个 php 网站。对于所有页面链接,我使用 foo.htm,并在内部使用 .htaccess 将其重写为 foo.php:

RewriteRule ^(.*)\.htm$ $1.php [NC,L]

这很好用——但是,它仍然允许您使用 foo.php 网址。我想 301 将 foo.php 重定向到 foo.htm 以防止任何旧的 foo.php 搜索引擎结果挂起,并将 foo.htm url 内部重写为 foo.php

如果不创建循环,我无法弄清楚如何做到这一点。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    将此代码放入您的 .htaccess 文件中:

    Options +FollowSymlinks -MultiViews
    RewriteEngine on
    
    RewriteCond %{THE_REQUEST} ^GET\s(.+)\.php [NC]
    RewriteRule ^ %1.htm [R=301,L]
    
    RewriteRule ^(.*)\.htm$ /$1.php [L,NC]
    

    【讨论】:

      【解决方案2】:
      RewriteRule ^(.*)\.htm$ $1.php [NC,L]
      RewriteRule ^(.*)\.php$ $1.htm [NC,R]
      

      选项 L 停止重写引擎,防止循环。

      【讨论】:

      • 我已经尝试过了,但它不起作用 - 它仍然会导致循环,使用服务器的目录路径。浏览器将停止循环并说“example.com/var/html/var/html/var/html/foo.htm”之类的内容导致重定向过多。这发生在 foo.htm 和 foo.php
      • 试过 [NC,S=1] 而不是 [NC,L] - 它的行为相同
      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2013-09-08
      • 2013-04-15
      • 1970-01-01
      相关资源
      最近更新 更多