我有一个域,我希望 https://www.example.com/someFolder/之后的每个尝试的网址都不会给出错误,而是给出一个php页面。
例如,我没有 somefolder/abc.php 文件,但去那里会运行一个进程.php文件并在那里显示它。
我试图修改 404 页面作为过程.php但这也修改了我不想要的 example.com/错误页面。
如果我不需要在根目录中修改/添加文件,那就太好了
向 somefolder 文件夹添加 .htaccess 确实有些工作,但随后 url 显示 somefolder/404.php而不是 somefolder/abc.php
修改您的 404 页面,就像您在那里放置 php 脚本一样,但检查 php 请求的 url 是否是目录。 根据这一点,采取适当的行动
<?php
$url = $_SERVER[REQUEST_URI];
// check if requested url was ending with slash
$pattern = '#/$#';
$result = preg_match($pattern, $url);
if ($result === 1) {
//request was to directory suffixed with slash
//do your php code for custom 404
die; //end the page generation
}
?>
request was not to directory ending with slash
put html of regular 404 page here or leave it blank
我了解到我可以将某个文件夹变成某个文件夹.php并使用 $_SERVER['PATH_INFO'] 使所有页面都存在。
在一般情况下,这只能通过使用.htaccess
文件并像这样重定向每个请求来完成......
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,NC,L]
之后,你可以在index中使用$_SERVER
、$_SESSION
和其他全局变量.php来决定如何处理404错误(即,你可以在这里实现如何定义404是什么,等等(。
例如,$_SERVER['PATH_INFO']
将能够告诉您请求的URL,并且您可以使用file_exists()
和其他调用的组合来确定是要显示完整的404,搜索结果,重定向,还是仅显示另一个脚本的结果。
这适用于 example.com/somefolder/、example.com/some/other/folder/和 example.com/a/b/c/d/e/f/g/等。