Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess 修改此重写以忽略查询字符串中的.php扩展名?_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

.htaccess 修改此重写以忽略查询字符串中的.php扩展名?

.htaccess 修改此重写以忽略查询字符串中的.php扩展名?,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,这个重写规则可以很好地删除.php扩展名,但是在查询字符串中传递文件名的情况下,它也会尝试删除那里的扩展名。如何使其忽略查询字符串 RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP RewriteRule (.*)\.php$ $1 [R=301] 您需要使重写条件下的(.*)匹配更加严格。现在,它正在匹配URI或查询字符串。尝试: RewriteCond %{THE_REQUEST} ^GET\ ([^\?]+)\.php RewriteRul

这个重写规则可以很好地删除.php扩展名,但是在查询字符串中传递文件名的情况下,它也会尝试删除那里的扩展名。如何使其忽略查询字符串

RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

您需要使重写条件下的
(.*)
匹配更加严格。现在,它正在匹配URI或查询字符串。尝试:

RewriteCond %{THE_REQUEST} ^GET\ ([^\?]+)\.php
RewriteRule (.*)\.php$ $1 [R=301]

[^\?]+
将匹配任何非
的内容。删除
\HTTP
可以确保查询字符串可以跟在
.php

后面。不,它不会。请做好准备,在提问之前检查一下实际的系统。谢谢你的评论,格本,但也许你可以给它添加一些实质内容?这条规则已经过测试,确实有效。也许你误解了这个问题?对不起。RewriteCond确实会匹配querystring,但这就是RewriteRule的作用。重写规则只匹配url的路径部分,从不包含查询字符串。因此,如果
.php
仅在querystring中,则
(.*)\.php$
将永远不会匹配。因此,这两个组合永远不会在querystring中仅与
.php
匹配url。