Apache mod_rewrite-从URL中删除index.php(在子文件夹中)
我正在尝试让一个API工作(目前在本地),它位于一个子文件夹中。我一直在尝试我能找到的每一个例子,但都以404个错误告终 我有这个网址: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规则。不断有人建议这样
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对我来说一直是个难题。我很高兴你能帮我解决这个问题。我以前去过那里。没问题。这看起来很有希望,但不幸的是没有成功