我正在尝试配置托管PHP应用程序的api.myapp.com
托管的APACHE虚拟服务器。
PHP应用程序的路由是
/* -> HTML
/api/* -> JSON
因此,同一个Apache实例也托管了app.myapp.com
,它只提供HTML。
app.myapp.com
和api.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>
答案 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]
不要忘记
上的RewriteEngine答案 2 :(得分:0)
在Viktors回答的基础上,尝试扩展重写条件。
RewriteCond %{HTTP_HOST} ^api
RewriteCond %{REQUEST_URI} !api
RewriteRule ^ http://%{HTTP_HOST}/api%{REQUEST_URI} [R=301,L]