mod_rewrite - 从URL中删除index.php(在子文件夹中)

时间:2014-02-11 22:03:52

标签: apache .htaccess mod-rewrite

我正在努力让API工作(目前在本地),它存在于子文件夹中。我一直在尝试我能找到的每一个例子,但最终都是404错误。

我有这个网址:
http://127.0.0.1/~owner/personal/api/v1/index.php/tasks

我希望能够使用它:
http://127.0.0.1/~owner/personal/api/v1/tasks

最终,它将成为这样:
http://api.mydomain.com/tasks

我似乎无法正确设置我的.htaccess规则。这不断得到建议,但什么都不做:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

我错过了什么?


更新

我已将虚拟主机设置为使用http://api.local/而不是之前使用的地址。

访问http://api.local/index.php/tasks有效。

访问http://api.local/tasks没有。

2 个答案:

答案 0 :(得分:1)

可能您的问题的一部分是您的开发环境。您正在使用本地服务器对多个子文件夹执行此操作,我认为它会使您的.htaccess变得混乱,具体取决于位置。

如果您的.htaccess位于您网站http://127.0.0.1/.htaccess的根目录中,那么它将无法正常运行。

确保它与index.php文件位于同一目录中,并确保{ap}配置文件中指定的开发环境/~owner/personal/api/v1/document root

然后你可以测试你的htaccess规则,看看它们是如何工作的。您的当前规则应该没问题,因为/tasks不会是根目录中的真实目录。

另一方面,

我总是建议使用您的真实域名,这样您就可以看到它的工作原理就像它在制作中一样。您可以通过修改PC上的HOST文件来实现这一目标,该网站仅供您使用,you可以通过yoursite.com访问。这个快速easy guide会告诉你。

尝试指定重写基础。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

答案 1 :(得分:0)

您正在向后使用RewriteRule的参数。你需要这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*?)/index.php(.+)?$ /$1$2

这意味着:

  • 如果它不是文件
  • 并且它不是目录
  • 看起来像/(可选),可能还有一些字符,然后是/index.php,然后可能会有更多字符,转到没有/index.php部分的网址。

请注意,我暂时删除了[L] - 这意味着“如果网址符合此规则,则不再应用任何规则。”您说您希望将其转换为http://api.mydomain.com/tasks,因此不应使用[L]