TL; DR:如果在URL中找到index-api.php
,我想点击api
文件,但是只需将所有其他请求指向site/dist
目录,就像它是'root'一样该网站。
所以,我花了太多时间来相信我,相信我,我已经挖掘了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
并保留相同内容:
<?php
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('./wordpress/wp-blog-header.php');
// phpInfo();
<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请求按预期正常工作,所以我知道我很接近。
有什么建议吗?
感谢任何人的帮助,这真的令人困惑!
答案 0 :(得分:1)
首先,您需要确保对/index-api.php
的请求不匹配并由第二条规则重写。在第二条规则中,您可以使用$1
。 $1
将替换为第一个捕获组中匹配的内容。我们还需要确保第二条规则与重写的规则不匹配,否则我们最终会遇到无限循环和内部错误。
您也可以在第一条规则中使用$1
,如下所示:
RewriteRule ^api/(.*)$ index-api.php?url=$1 [L]
RewriteCond %{REQUEST_URI} !^/site/dist/
RewriteCond %{REQUEST_URI} !^/index-api\.php
RewriteRule (.*)$ site/dist/$1 [L]
我建议您阅读mod_rewrite的the documentation,以便更好地了解如何使用它以及在重写网址时您可以使用的内容。