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路由器。
答案 0 :(得分:3)
您是对的,内置的PHP Web服务器使您可以使用路由脚本。但是,在诸如在Ionos上托管的环境中,此功能通常由运行中的任何Web服务器执行。
不幸的是,我在扫描Ionos网站时很难找到Ionos提供的Web服务器。您确定他们正在运行Apache并且已启用mod_rewrite
和本地.htaccess
替代吗?这些都可以解释为什么您在那里遇到问题。
从对问题的描述中,听起来您的网站可能未正确配置其文档根目录路径,或者未将其设置为使用index.php
作为目录索引文件(例如,通过DirectoryIndex
Apache配置设置。
我能建议的最好方法是与Ionos技术支持部门联系或寻求他们提供给客户的任何技术文档。我什至不知道它们是否或允许您覆盖哪些配置。