mod_rewrite API路径

时间:2014-11-21 10:32:45

标签: apache .htaccess mod-rewrite url-rewriting

我正在尝试配置托管PHP应用程序的api.myapp.com托管的APACHE虚拟服务器。

PHP应用程序的路由是

/* -> HTML
/api/* -> JSON

因此,同一个Apache实例也托管了app.myapp.com,它只提供HTML。

app.myapp.comapi.myapp.com都指向PHP应用程序目录的public/。我想做的是:所有进入api.myapp.com/<method>的请求都会被重写为api.myapp.com/api/<method>,但我担心我还没有成功。

以下是我在服务器配置部分提出的内容:

 <IfModule mod_rewrite.c>
   RewriteCond %{HTTP_HOST} api
   RewriteRule ^ http://api.%{HTTP_HOST}%/api/{REQUEST_URI} [R=301,L]
 </IfModule>

编辑:我的.htaccess看起来像;

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^api\.myapp\.com$
    RewriteCond %{REQUEST_URI} !^/api
    RewriteRule ^ /api%{REQUEST_URI} [L]
</IfModule>

3 个答案:

答案 0 :(得分:1)

以前的解决方案都是部分正确的。将两者结合如下:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^api\.myapp\.com$
RewriteCond %{REQUEST_URI} !^/api
RewriteRule ^ /api%{REQUEST_URI} [L]

答案 1 :(得分:0)

尝试

RewriteCond %{HTTP_HOST} ^api
RewriteRule ^ http://%{HTTP_HOST}/api%{REQUEST_URI} [R=301,L]
  1. 最好使用更具体的规则:^ api - host以api
  2. 开头
  3. api。不需要。 HTTP_HOST已包含 api。
  4. 使用%{REQUEST_URI}代替{REQUEST_URI}
  5. REQUEST_URI已包含第一个 / 符号
  6. 不要忘记

    上的RewriteEngine

答案 2 :(得分:0)

在Viktors回答的基础上,尝试扩展重写条件。

RewriteCond %{HTTP_HOST} ^api
RewriteCond %{REQUEST_URI} !api
RewriteRule ^ http://%{HTTP_HOST}/api%{REQUEST_URI} [R=301,L]