Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
Php Mod重写和404重定向_Php_.htaccess_Redirect_Mod Rewrite - Fatal编程技术网

Php Mod重写和404重定向

Php Mod重写和404重定向,php,.htaccess,redirect,mod-rewrite,Php,.htaccess,Redirect,Mod Rewrite,我想让websitename.com/file.php变成websitename.com/file/,在通过StackOverflow浏览之后,经过无数次尝试和错误,这就是我得到的,它正在工作 RewriteEngine on RewriteRule ^(.*)\/$ $1.php [NC] 我还将其添加到header.php中,这样,如果任何文件名显示为.php扩展名,它将重定向到我想要的“斜杠”URL $NoPhpUrl = $_SERVER['HTTPS'] == 'on' ? 'htt

我想让websitename.com/file.php变成websitename.com/file/,在通过StackOverflow浏览之后,经过无数次尝试和错误,这就是我得到的,它正在工作

RewriteEngine on
RewriteRule ^(.*)\/$ $1.php [NC]
我还将其添加到header.php中,这样,如果任何文件名显示为.php扩展名,它将重定向到我想要的“斜杠”URL

$NoPhpUrl = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
$NoPhpUrl = $NoPhpUrl .'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if(strstr($NoPhpUrl , ".php"))
{
    $NoPhpUrl = str_replace(".php","/", $NoPhpUrl );
    header("Location: ".$NoPhpUrl );
}
我目前遇到的问题是,当我键入此链接websitename.com/file(末尾没有斜杠)时,它将转到404页

如果目录中不存在文件,我可以使用404页面。
但是如果是这样的话,有没有一种方法可以强制斜杠出现在url的末尾(如果文件存在),而不必转到404?

您应该这样尝试您的规则,并关闭“多视图”。我添加了强制尾部斜杠,就像我在Apache而不是PHP中所做的那样。与代码重定向相比,服务器端应该是首选

Options -MultiViews
RewriteEngine on

#force trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$ [NC]
RewriteRule ^(.*)$ /$1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)/$ $1.php [L,NC]

您应该以这种方式尝试您的规则,并关闭“多视图”。我添加了强制尾部斜杠,就像我在Apache而不是PHP中所做的那样。与代码重定向相比,服务器端应该是首选

Options -MultiViews
RewriteEngine on

#force trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$ [NC]
RewriteRule ^(.*)$ /$1/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)/$ $1.php [L,NC]

检查您的if条件,您将用/替换.php。因此,这就是为什么您不能在没有/的情况下访问path的原因。签出。

签入您的if条件,您将用/替换.php。因此,这就是为什么您不能在没有/的情况下访问path的原因。退房。

谢谢!强制尾随斜杠可以工作,但如果文件不在目录中,页面会持续加载一段时间,结果显示:websitename.com/filenoexist.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php/Ok我稍微修改了最后一条规则。它很完美!!谢谢谢谢强制尾随斜杠可以工作,但如果文件不在目录中,页面会持续加载一段时间,结果显示:websitename.com/filenoexist.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php/Ok我稍微修改了最后一条规则。它很完美!!谢谢