Apache服务器上的PHP路由

时间:2020-05-10 21:59:40

标签: php apache .htaccess

index.php中的以下代码提供了使用内置的php Web服务器运行该路由时的预期路由行为:

<?php
$request = $_SERVER['REQUEST_URI'];
switch ($request) {
    case '/' :
        echo 'This is the Home Page';
        break;
    case '/about' :
        echo ' This is the About Page';
        break;
    default:
        echo 'Resource not Found (404)';
        break;
}

上传到运行Apache的Ionos Linux Web服务器的相同代码无法正常工作:如果我从firefox浏览器(例如http://mywebsites.org.uk/root-directory)访问根目录,则在浏览器中将显示Resource not Found (404)。如果我在URL后面附加一些内容(例如http://mywebsites.org.uk/root-directory/about),浏览器只会给出一些带有广告的页面,当服务器上没有与该路径相对应的内容时,您会在该页面上看到广告。如果您将其他任何单词更改为“大约”,也会发生同样的情况。

我尝试将根目录中的以下.htaccess文件与index.php文件一起使用:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php [QSA,L]

现在我用http://mywebsites.org.uk/root-directory得到了相同的结果。像以前一样在浏览器中显示Resource not Found (404)。但是,用http://mywebsites.org.uk/root-directory/about或任何替换“ about”的单词现在在浏览器中显示一条错误消息:

多种选择 在此服务器上找不到您请求的文档名称(/index.php)。但是,我们发现了名称与您要求的名称相似的文档。 可用文件: /index.html(通用基本名称)

单击index.html(超链接)时,我发现它位于根目录上方的目录中,其中包含index.php文件。即它在mywebsites.org.uk目录中。显然这不是我所追求的。

我还尝试用.htaccess替换FallbackResource /index.php文件的内容。结果与我之前描述的完全没有.htaccess文件时相同。

我发现很难理解我的Ionos Web服务器。我不知道是否可以更改Apache的配置文件,并且对.htaccess文件了解很少。我已经考虑过解决此问题,因为那里的文档似乎更详尽,因此更改为AWS。但是,如果可以解决此问题,我希望不要更改。基本上,我希望能够在运行Apache的Ionos服务器上构建一个PHP路由器。

1 个答案:

答案 0 :(得分:3)

您是对的,内置的PHP Web服务器使您可以使用路由脚本。但是,在诸如在Ionos上托管的环境中,此功能通常由运行中的任何Web服务器执行。

不幸的是,我在扫描Ionos网站时很难找到Ionos提供的Web服务器。您确定他们正在运行Apache并且已启用mod_rewrite和本地.htaccess替代吗?这些都可以解释为什么您在那里遇到问题。

从对问题的描述中,听起来您的网站可能未正确配置其文档根目录路径,或者未将其设置为使用index.php作为目录索引文件(例如,通过DirectoryIndex Apache配置设置。

我能建议的最好方法是与Ionos技术支持部门联系或寻求他们提供给客户的任何技术文档。我什至不知道它们是否或允许您覆盖哪些配置。