.htaccess规则以删除与现有重写规则冲突的文件扩展名

.htaccess规则以删除与现有重写规则冲突的文件扩展名,.htaccess,redirect,mod-rewrite,url-rewriting,.htaccess,Redirect,Mod Rewrite,Url Rewriting,我在.htaccess中有工作代码,可以完成以下任务 将非www重定向到www(和https:) 将http重定向到https(和www) 允许在/file访问以/file1.htm等结尾的URL 然而,正如我发现的,第三条规则更像是一种黑客行为,需要与删除指向.htm版本的所有现有链接(不在您的控制范围内)结合使用。结果,谷歌开始抓取这两个版本,并决定哪些版本是规范的 我想修改第三条规则,不只是允许访问/file,而是用301消息重写URL。有几个关于Stackoverflow的答案对其他人有

我在.htaccess中有工作代码,可以完成以下任务

  • 将非www重定向到www(和https:)
  • 将http重定向到https(和www)
  • 允许在/file访问以/file1.htm等结尾的URL
  • 然而,正如我发现的,第三条规则更像是一种黑客行为,需要与删除指向.htm版本的所有现有链接(不在您的控制范围内)结合使用。结果,谷歌开始抓取这两个版本,并决定哪些版本是规范的

    我想修改第三条规则,不只是允许访问/file,而是用301消息重写URL。有几个关于Stackoverflow的答案对其他人有效,但由于文件中的现有规则,这些答案对我无效,因此我将其作为一个新问题发布

    如何在不违反现有3条规则的情况下,向/file的所有/file.htm链接添加301重定向

    重新编写引擎打开
    RewriteCond%{http_host}^example.com[NC]
    重写规则^(.*)$https://www.example.com/$1[L,R=301]
    重写条件%{HTTPS}关闭
    重写规则(.*)https://%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
    重写cond%{REQUEST_FILENAME}-F
    重写规则^([^\.]+)$$1.htm[NC,L]
    重定向301/output.php/
    我想修改第三条规则,不只是允许访问/file,而是用301消息重写URL

    使用301没有什么意义——你想让它成为一个内部重定向

    您应该添加一个新规则,将/file.htm的请求从外部重写为/file,并让该规则使用301状态代码:

    #1) externally redirect "/file.htm" to "/file"  
    RewriteCond %{THE_REQUEST} /([^.]+)\.htm [NC]
    RewriteRule ^ /%1 [NC,L,R=301]
    #2) Internally map "/file" back to "/file.htm"
    RewriteCond %{REQUEST_FILENAME}.htm -f
    RewriteRule ^(.*?)/?$ /$1.htm [NC,L]
    

    “我想修改第三条规则”-不,你不需要。使用301没有任何意义,您希望将其保留为内部重定向。您希望添加一个新规则,将
    /file.htm
    的请求从外部重写为
    /file
    ,并让该规则使用301状态代码。尝试在一个规则中填充太多不同的条件检查很快就会变得混乱。但是,如果您只需首先执行此重定向,并为目标指定完整的绝对HTTPS URL,您应该能够处理这种情况。当禁用HTTPS时,您将捕获所有内容
    (.*)
    ,但您将其重写为HTTPS版本中的
    /
    ,因此此时您已经丢失了
    faq.htm
    ,它甚至不再能够删除
    .htm
    后缀。正如我所说,您需要首先执行后一个操作-首先执行从
    .htm
    到后缀less的重定向,并明确指定URL的HTTPS版本作为结果。
    301
    不属于那里。您一直在这里混合两个不同指令的语法。谢谢,您可能希望在答案的正文中为将要复制并粘贴到其.htaccess文件中的人写出这两个规则。好的,我现在也包括了内部重写的“对应项”。