【发布时间】:2013-11-24 03:50:04
【问题描述】:
TL; DR:如果在 URL 中找到 api,我想点击 index-api.php 文件,然后简单地将所有其他请求指向 site/dist 目录,就好像它是站点的“根”一样。
所以,我在这方面花费了太多时间,相信我,我已经挖掘了 mod_rewrite 的所有资源。我想我只是不太了解,所以我想在这里问一下。
理论上,我想做的事情似乎很简单。我正在使用 Grunt 构建一个单页应用程序(Angular App),并将其输出到 WordPress 安装的根目录。 WordPress 安装只是使用 WordPress JSON API 插件提供一个 API,所以我希望站点的根目录访问我的 Grunt 目录(位于 site/dist/index.html),但对 siteurl.com/api 的所有请求都访问 index.php文件并正常进行。
请记住,我在此 site/dist 目录中还有其他资产/图像,因此理想情况下,如果对站点根目录的所有请求都仅使用此文件夹作为站点的“基础”(例如对siteurl.com/images/testimage.jpg 的请求来自site/dist/images/testimage.jpg)。
我觉得我在这里找到了一些东西,很惊讶我找不到任何可以直接解决这个问题的东西。
我现在所做的将 index.php 从 WordPress 重命名为 index-api.php 并保持不变:
index-api.php:
<?php
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('./wordpress/wp-blog-header.php');
// phpInfo();
.htaccess:
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/(.*)$ index-api.php [L]
RewriteRule (.*)$ site/dist/index.html [L]
</ifModule>
我从几篇帖子中尝试了无数其他努力,试图让它发挥作用,在我看来它应该可以正常工作。有趣的是,如果我注释掉最后一行RewriteRule (.*)$ site/dist/index.html [L],api 请求会按预期正常工作,所以我知道我已经接近了。
有什么建议吗?
感谢任何人对此的帮助,这真的很混乱!
【问题讨论】:
-
理论上,它应该可以工作,但我相信 WordPress 会让所有请求都通过它自己的路由器页面。我会考虑使用
RewriteCond作为第二条规则,但我对 Wordpress 的了解非常有限,我不确定这是否能完成任何事情:pastebin.com/sn9pt4VS -
@Sumurai8 所以,暂时忽略 WordPress。如何将所有对
/api/的请求指向一个文件,然后让另一个site/dist目录充当所有其他请求的“根”? -
你看过 pastebin 了吗?
-
@Sumurai8 我做到了,但这就是问题所在。使用您的示例,我对位于
/site/dist目录中的资产的重定向不会显示,这是有道理的,因为所有请求都被推送到该index.html文件。我想我更好奇我是否可以简单地让所有请求“认为”/site/dist是站点根目录,因此对images/test.jpg的请求实际上会从/site/dist/images/test.jpg中提取。这有意义吗?这甚至可能吗? -
我已经添加了我认为您想要的答案。您可能还需要排除
/index.php或 wordpress 在最后一条规则中使用的任何内容。
标签: php wordpress .htaccess angularjs mod-rewrite