【发布时间】:2014-08-28 00:44:11
【问题描述】:
您好,这是我第一次在这里提出问题,所以如果我的问题不清楚或我的代码不正确,请对我放松一点,哈哈。我目前将我的新 php mvc 网站上传到 123-reg.co.uk,并且我正在使用带有路由器类的 apache mod_rewrite。当我在我的本地主机上时它工作得很好,但是当它处于活动状态时,mod_rewrite 被忽略并且控制器无法识别,例如,如果我输入 http://www.examplewebsite.co.uk,家庭控制器会像它应该加载的那样加载,但是如果我尝试加载不同的控制器,例如 http://www.examplewebsite.co.uk/images我也需要一个服务器错误 404 页面。我已经尝试解决这个问题好几天了,但没有成功,我做了一些研究,123-reg.co.uk 确实支持 mod_rewrite,我觉得我失去了它哈哈,任何帮助将不胜感激,在此先感谢.
这是路由器类:
class Router {
public function __construct()
{
if(empty($_GET['url']))
{
Help::loadApplication('controllers','home');
return new Home();
}
elseif(isset($_GET['url']))
{
$url = $_GET['url'];
$url = rtrim($url,'/');
$url = filter_var($url,FILTER_SANITIZE_URL,true);
$url = explode('/',$url);
Help::loadApplication('controllers',$url[0]);
if(class_exists($url[0]))
{
$controller = new $url[0];
if(isset($url[1]))
{
$methodName = $url[1];
if(method_exists($controller, $methodName))
{
$methodParams = (isset($url[2]) ? $url[2] : false);
$controller->{$methodName}($methodParams);
}
}
}
else
{
Help::loadApplication('controllers','home');
return new Home();
}
}
}
这是 mod_rewrite:
RewriteEngine On
RewriteBase /http://www.examplewebsite.co.uk
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php/?url=$1 [QSA,L]
更新!!
其他有同样问题的人,它不起作用的原因是因为 123-reg.co.uk 不支持他们的 Windows 包上的 mod_rewrite,但在那里支持 Linux 包,这对他们来说会很好声明当我注册 Windows 包但现在切换到 Linux 包时。谢谢你们的帮助!
【问题讨论】:
-
去掉
RewriteBase这一行,这样行吗? -
我试过了,还是不行,快把我逼疯了,这是整个过程中最难的部分,哈哈
标签: php apache .htaccess mod-rewrite