Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod_rewrite-从URL中删除index.php(在子文件夹中)_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

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

Apache mod_rewrite-从URL中删除index.php(在子文件夹中),apache,.htaccess,mod-rewrite,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规则。不断有人建议这样

我正在尝试让一个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
没有。

您正在向后使用
重写规则的参数。你需要这个:

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

  • 如果它不是一个文件
  • 它不是一个目录
  • 它看起来像是
    /
    (可选),可能是更多的字符,然后是
    /index.php
    ,然后可能是更多的字符,不带
    /index.php
    部分进入URL

请注意,我暂时删除了
[L]
,它的意思是“如果URL与此规则匹配,请不要再应用任何规则。”您说要继续将其转换为
http://api.mydomain.com/tasks
,所以你不应该使用
[L]

也许你的部分问题是你的开发环境。您正在使用一个本地服务器在多个子文件夹中执行此操作,我认为这会影响您的.htaccess,具体取决于位置

如果您的
.htaccess
位于网站的根目录中
http://127.0.0.1/.htaccess
那么它就不能正常工作了

确保它与
index.php
文件位于同一目录中,并确保
/~owner/personal/api/v1/
是apache配置文件中指定的开发环境的
文档根目录

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

另一方面

我总是建议你使用真实的域名,这样你就可以看到它是如何工作的,就好像它在生产中一样。您可以通过修改电脑上的
主机
文件来实现这一点,该网站将仅对您可用,并且
您可以通过yoursite.com访问。这张快报会告诉你的

尝试指定重写基

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

我不知道为什么我之前没有想到这一点。我已经在我的机器上设置了一个虚拟主机,现在我指向的不是前面使用的地址。不过,我仍然无法让重写规则正常工作,api坚持在其中包含/index.php/。/v1文件夹被设置为root,其中包含.htaccess文件。不过运气不好。我刚注意到你答案的第一部分。。。是的,它最终将成为
http://api.local/.htaccess
。。。在这种情况下,这会如何改变重写规则?嗯,不需要,但可以尝试指定重写基。请参阅更新中的示例。谢谢,它终于起作用了。htaccess对我来说一直是个难题。我很高兴你能帮我解决这个问题。我以前去过那里。没问题。这看起来很有希望,但不幸的是没有成功