Mod-Rewrite Server错误:RewriteRule:无法编译正则表达式

时间:2014-05-30 10:01:37

标签: php apache .htaccess mod-rewrite url-rewriting

我刚刚上传了一个在一个主机上完美运行的网站,而重写规则的.htaccess文件并不起作用。

在实际位置,.htaccess文件中包含此内容:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([A-Za-z\-0-9]+)$ index.php?page=$1 [QSA]
ErrorDocument 404 /index.php

这应该重写

中的网址

www.mysite.co.uk/?page=about

要:

www.mysite.co.uk/about

当我在新主机上尝试它时,它会在浏览器中抛出错误:

内部服务器错误,这是您的脚本错误,请查看错误日志以获取更多信息。

当我检查错误日志时,它说:

[Fri May 30 10:51:53 2014] [alert] [client 87.127.116.49] /domains/m/i/mysite.co.uk/public_html/.htaccess: RewriteRule: cannot compile regular expression '^([A-Za-z\\-0-9]+)$'\n

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我觉得你有点困惑自己?

您为什么要将www.mysite.co.uk/?page=about写入www.mysite.co.uk/about

这个怎么样:

当访问者到达时:

www.mysite.co.uk/about

他们实际看到的是:

www.mysite.co.uk/?page=about

但客户端网址仍为:

www.mysite.co.uk/about

这仍然是一个替代且不友好的网址:

www.mysite.co.uk/?page=about

你需要这个:

    RewriteEngine on
    RewriteRule ^(.*)$ index.php?page=$1

请注意,您需要让index.php包含以下内容:

<?php
if (isset($_GET['page']))
{
    $pageToDisplay = $_GET['page'];
    # I would test at this point, so:
    echo 'I am over here, I got this info: '.$_GET['page'].''; exit;
    // Display the appropriate page
}
else
{
    # I would test at this point, so:
    echo 'I got here empty handed...'; exit;
    // Display your homepage
}
?>

如果你在此之后获得500,我会确保所有模块都已启用。看起来你正在运行旧版本的Apache,我会确保你正在尝试做的事情在该版本的Apache重写模块中得到完全支持吗?

另见:Pretty URLs with .htaccess Rewriting Tips.

作者将Twitter描述为友好的URL。