我在api.php
文件中添加了一些路由。这些路由在localhost环境中工作得很好。
http://localhost/api/v1/events
提供所需的输出,但当上传到生产/远程服务器时,我无法使用域名访问它。
http://domainname/api/v1/events
抛出404错误。我在本地主机和prod/remote服务器中使用相同的.htaccess
文件。我不确定为什么它在prod/remote服务器中不能正常工作。
顺便说一句,我有网络路由,在两个环境下都能正常工作。我的.htaccess
文件复制如下。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
根据答案修改了.htaccess,但它对我不起作用:(
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# API
RewriteRule ^api/(.*) api.php/$1 [L]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
我也试过这个。
RewriteRule ^API/(.*)routes/api.php/$1 [L]
有谁能帮忙告诉我出了什么问题吗?x1c 0d1x我的根文件夹
api.php可用的文件夹
2条答案
按热度按时间evrscar21#
令人困惑的是,你说它“在localhost中完美地工作”,但你在两个环境中使用的是相同的
.htaccess
文件。这在localhost上不能工作,除非你在某处有其他指令,因为没有任何东西可以将这样的请求重写为/api.php
。要启用此功能,并将额外的路径信息作为path-info传递给
api.php
,则需要在# Handle Authorization Header
规则后添加以下内容:这将在内部将
/api/v1/events
形式的请求重写为/api.php/v1/events
,允许api.php
从$_SERVER['PATH_INFO']
超全局读取/v1/events
。如果没有这个指令(并且MultiViews被禁用),形式为
/api/v1/events
的请求将通过index.php
路由,而我假设“路由”没有定义,因此出现404。**UPDATE#1:**否,我的
/api.php
与web.php
在同一目录下,即routes
在这种情况下,您需要将上述规则修改为:
**UPDATE#2:**从更新后的URL结构来看,
/routes
实际上在文档根目录(.htaccess
和index.php
文件所在的目录)的/myprojectfolder
下,因此需要修改上面的内容来说明这一点。例如:然而,似乎直接请求
/myprojectfolder/routes/api.php/v1/events
无论如何都不起作用,因此将其作为 path-info 传递似乎不是正确的操作过程。jyztefdp2#
选项-多视图-索引