.htaccess规则以删除与现有重写规则冲突的文件扩展名
我在.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的答案对其他人有
重新编写引擎打开
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文件中的人写出这两个规则。好的,我现在也包括了内部重写的“对应项”。