.htaccess-不对API调用应用重写规则

时间:2019-03-21 23:19:47

标签: php apache .htaccess

基本上,我有一个单独的台式机和移动网站。 两者都与单个后端通信。移动版本通过REST APIS进行通信。

想法是将两个站点都托管在一个域中。 www.example.com。并在.htaccess中设置规则,以查看请求是否来自移动设备,请从另一个文件夹而不是根文件夹获取网站内容。移动内容位于文件夹/ p​​wa中。

udfs.foo

我尝试过类似的事情。

var result = dataPage.Where(x => 
                              DbHelper.byPropertyContains(x.udfs, field, values)
                           );

来自Android移动设备的所有请求都路由到/ pwa,但问题是对REST APIS的调用失败。 所有其余的API调用都具有如下的URL结构

SO when accessed from mobile domain should be www.example.com, not example.com/pwa

我如何使其工作?如果请求来自移动设备,则仅网站内容应来自/ pwa文件夹,其他所有内容均应正常工作。

.htaccess文件的全部内容

    Options +FollowSymlinks
    RewriteEngine on


    # Android devices
    RewriteCond %{HTTP_USER_AGENT} Android
    RewriteCond %{REQUEST_URI} !/pwa 
    RewriteRule ^(.*)$ /pwa/$1 [NC,L]

请帮助!

2 个答案:

答案 0 :(得分:3)

您可以使用此规则跳过/pwa/api来接收来自Android的请求:

# Android devices
RewriteCond %{HTTP_USER_AGENT} Android [NC]
RewriteCond %{THE_REQUEST} !\s/+(pwa|api) [NC]
RewriteRule !^pwa/ pwa%{REQUEST_URI} [L,NC]

答案 1 :(得分:0)

要让api照常工作,您应该将其排除在请求之外:

RewriteCond %{HTTP_USER_AGENT} Android [NC]
RewriteCond %{THE_REQUEST} !(pwa|api) [NC]
RewriteRule ^ pwa%{REQUEST_URI} [L]

因为可能有两个api进入请求,一个URI像这样/api/,第二个是在像这样的{{1 }}因此,根据先前的规则,任何与请求一起出现的URI都将被排除。