.htaccess GoDaddy辅助站点上的RewriteRule

时间:2015-07-29 05:22:41

标签: regex apache mod-rewrite redirect

我遇到的问题是GoDaddy托管网站不是帐户"主要"现场。服务器上的站点路径是:webroot / FBM /

访问该网站时,www.mysite.com会打开位于webroot / FBM / index.php的默认文件(index.php)。

大量的研究帮助我发现我需要使用"选项-Multiviews"在我的.htaccess文件的第一行,以便任何RewriteRule可以工作(再次,只在GoDaddy托管"备用"站点)。

目前,我的.htaccess文件如下所示:

$route['products/display/(:any)/(:any)/(:any)'] = 'Products_controller/display/$2/$3/$4';

当我使用这个.htaccess文件时,

  • www.mysite.com/bonus/和www.mysite.com/bonus/Stuff按预期工作(打开/bonus.php有或没有参数)。
  • www.mysite.com/bonus.php现在似乎正在工作(我猜这个当前的.htaccess文件修复了它)但最初它给出了一条消息,类似于通过以下方式直接访问php文件的消息: / LI>
  • www.mysite.com/bonus根本不起作用,但给出了一个相当奇怪的信息:
  

在此服务器上找不到请求的URL / FBM /奖励。

由于/ FBM不是URL的一部分,我不希望将其视为错误消息的一部分。

这是一个简单的用例,用于显示我所有GoDaddy托管的#34;备用"站点。其他问题通常要复杂得多,并且需要将对站点的所有调用重新路由到index.php。但是,对于这个特定的项目,我不需要解决这个问题,我觉得如果我能解决这个问题,答案就会出现在其他网站上。

顺便说一下,这个.htaccess文件在我的开发环境中失败了(没有重写到bonus.php,虽然可以直接通过URL获得bonus.php。)

URL重写和正则表达式的整个概念对我来说很陌生,通过google和stackoverflow上的类似问题阅读并没有帮助。我已经研究了这个问题好几个月了,我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

我有一个解决方案,但我不太喜欢它。我添加了另一行来处理用户没有包含尾部斜杠的情况:

Options -Multiviews
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^bonus$ /bonus.php
RewriteRule ^bonus/(.*)$ /bonus.php?query=%1

当这条线也不起作用时,我已经解决了这个问题:

RewriteRule ^bonus/?(.*)$ /bonus.php?query=%1

我仍然对GoDaddy上的Apache对其他托管域的行为感到困惑。

仍然欢迎更好的答案。