是否需要对.htaccess文件进行任何更改以访问API路由?

ivqmmu1c  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(109)

我在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可用的文件夹

evrscar2

evrscar21#

令人困惑的是,你说它“在localhost中完美地工作”,但你在两个环境中使用的是相同的.htaccess文件。这在localhost上不能工作,除非你在某处有其他指令,因为没有任何东西可以将这样的请求重写为/api.php
要启用此功能,并将额外的路径信息作为path-info传递给api.php,则需要在# Handle Authorization Header规则后添加以下内容:

# API
RewriteRule ^api/(.*) api.php/$1 [L]

这将在内部将/api/v1/events形式的请求重写为/api.php/v1/events,允许api.php$_SERVER['PATH_INFO']超全局读取/v1/events
如果没有这个指令(并且MultiViews被禁用),形式为/api/v1/events的请求将通过index.php路由,而我假设“路由”没有定义,因此出现404。

**UPDATE#1:**否,我的/api.phpweb.php在同一目录下,即routes

在这种情况下,您需要将上述规则修改为:

RewriteRule ^api/(.*) routes/api.php/$1 [L]

**UPDATE#2:**从更新后的URL结构来看,/routes实际上在文档根目录(.htaccessindex.php文件所在的目录)的/myprojectfolder下,因此需要修改上面的内容来说明这一点。例如:

RewriteRule ^api/(.*) myprojectfolder/routes/api.php/$1 [L]

然而,似乎直接请求/myprojectfolder/routes/api.php/v1/events无论如何都不起作用,因此将其作为 path-info 传递似乎不是正确的操作过程。

jyztefdp

jyztefdp2#

If you use passport in laravel and not working token then you use .htaccess

选项-多视图-索引

RewriteEngine On
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]

相关问题