我把一个站点从一个主机移到另一个主机,这样做遇到了无法下载我的.htaccess文件的陷阱。
我试图重build基于较早的(可能是非工作)保存副本的.htaccess,但我所得到的是404页。 换句话说,这个简单的重写规则有些问题,但我认为mod_rewrite工作正常,因为我不再看到“内部服务器错误500”types的错误,其他虚拟主机网站可以在同一台机器上运行mod_rewrite。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^([^/.]+)/?$ index.php?page=$1 [L] </IfModule>
来自我的网站的示例(实际,工作)页面:
site.com/index.php?page=tips
我所有的链接,并希望地址栏应该是这样的forms:
site.com/tips/
我以为我明白了这一点。 这不是非常复杂。 根据不同网站的build议,我已经把RewriteRule系列搞乱了,并且遇到了各种各样的组合。 我search了两天,发现了一些与我正在做的事情接近的事情,但没有完全匹配。 每当我做出改变,我已经重新启动服务器上的Apache服务,去我的本地机器上的Chrome浏览器,按Ctrl + F5清除caching和刷新; 有没有机会我错过了“干净的重新加载”步骤?
整个网站通过index.php发生,我不打算复杂的事情进一步嵌套,直到我明白了正则expression更好。 任何帮助是极大的赞赏!
旁注:我在Apache v2.2.22,我似乎无法得到这个版本的“RewriteLogs”function工作(当然不使用.htaccess的),或者我今天不会发布这个noob问题。 在2.4中,这个特性不再有效(logging得到了全面的检查),但我似乎无法升级到在OpenVZ Ubuntu 12.04 x64服务器上使用apt-get。
结果是我的服务器上没有启用mod_rewrite。 我通过在网站的目录中放置一个phpinfo.php文件并检查mod_rewrite的“加载模块”部分来检查这一点,该模块确实缺less。
我启用了mod_rewrite和sudo a2enmod rewrite ,再次用apache2ctl -M检查了模块列表,并且所有的东西都开始工作了。
更奇怪的是,mod_rewrite以某种方式closures了整个服务器,而不仅仅是这些页面。 鉴于我正在使用他们各自的.htaccess文件服务其他网站,他们也没有运作(这是什么提示这个),我很高兴我发现相对较快。
我还了解到,Ubuntu有自己的apache更新批准/testing组,他们还没有资格使用Apache的2.4补丁,而且可能还有很长的一段时间,因为它带来了一些重大的变化。