我正在努力让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
没有。
答案 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]
。