- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们正在用 Gatsby 构建的 SSG HTML 版本替换旧的基于 PHP 的网站(基于 Statamic v1)。
问题是:只有一部分现有页面必须更换,而成员(member)空间、/login
和/contact
页面必须暂时保留。
所以我想知道我应该如何使用新版本调整当前的 .htaccess
配置首先在特定目录中找到新的静态内容(public/
) 或者如果不是,则回退到旧的 index.php?path=
方法。
使用 nginx
这将通过 try_files
指令完成所以,这个问题在某种程度上与: https://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files
但我绝对不明白 balancer://app_cluster
的东西..
这是目录的简化 View ,因为它们必须由 Apache 提供服务:
www/
├── index.php
├── (... more CMS files)
└── public
├── index.html
├── main.js
├── robots.txt
├── img
│ ├── intro.jpg
│ ├── logo.svg
│ └── table.png
├── about
│ └── index.html
└── staff
└── index.html
任何到public/
的内容都必须首先
没有 /public
出现在最终 URL 中:
URL : /img/intro.jpg => /public/img/intro.jpg (rewritten as /img/intro.jpg)
并且每个匹配 /index.html
页面的 URL 都必须在没有它的情况下重写:
URL : '' or '/' => /public/index.html (rewritten as '')
URL : /staff or /staff/ => /public/staff/index.html (rewritten as /staff)
现在所有未找到的文件都重定向到 /index.php?path=...
。
是否只有 Apache 才有可能不使用两个单独的子域和 virtual_hosts.. 来分隔两个源?
我想是的,鉴于 Apache 不可思议的力量,但由于我现在更习惯了 nginx 的方式,我真的需要你的帮助!! :)
(不要问我为什么)
# Turn on the Rewrite Engine
RewriteEngine On
# PERMANENT HTTPS REDIRECTION
RewriteCond %{REQUEST_SCHEME} =http
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# If you're running in a subfolder (like http://example.com/statamic),
# add that here. E.g. /statamic/
RewriteBase /
# Remove trailing slashes from your URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]
# Remove the index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
最佳答案
如果我理解正确,他们的关键要求是在 public/
中提供静态内容(如果存在),如果不存在,则将请求传递给 index.php
。
这个要求相对容易处理。规则的顺序很重要,因为它们按顺序应用于每个传入请求。我们可以先对public/
内容进行测试,如果存在则优先返回并停止处理。如果请求与该测试不匹配,处理将继续到 index.php
重定向。
RewriteEngine On
# If the requested file or directory exists in public/, internally redirect
# there (internally means no actual new http request, and the URL in the
# browser does not change). Use OR flag to OR the 2 conditions, instead of
# the usual implicit AND.
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/public%{REQUEST_URI} -d
RewriteRule ^.*$ public/%{REQUEST_URI} [L]
# If the requested file does not exist, and is not a directory, pass the
# request to index.php, appending any query string.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
注意你提到:
Every file not found are redirected to /index.php?path=... as allready done now.
需要说明的是,这实际上不是您包含的.htaccess
现在所做的。该规则只是将请求传递给 index.php
,没有 path
参数(尽管包括请求中已有的任何现有参数)。您的 index.php
可以使用 $_SERVER
变量访问 - 并且肯定已经在访问 - 真正请求的路径。但是,如果您现在确实想按照您的描述将路径附加到查询中,则必须将该规则修改为:
RewriteRule ^(.*)$ index.php?path=$1 [QSA,L]
另一个旁注 - 问题和 .htaccess
中都有很多无关的东西,我认为这混淆了问题,也许这就是为什么你在这里没有得到很好的回应。
关于php - 如果找不到,我们如何使用 Apache 重定向到新的 HTML 静态内容并回退到旧的基于 CMS 的 PHP 版本? (nginx try_files),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55401961/
假设我这样做: SELECT * FROM table WHERE field2 = '2019@162440' OR field2 LIKE '%%2019@%%'; 在这种情况下,它会尝试同时执行
我正在研究背景大小有几个原因,但主要是因为通过使用它我可以使用 Sprite 和我可以使这些图像响应。当然,问题出在较旧的浏览器上,例如 IE8 及更低版本。 我希望我可以使用 polyfill但是这
我在单个 sprite 图像中包含页面上的许多图像,由于网站的其他要求,这些图像必须包含在单个 sprite 中。 虽然这在大多数浏览器中工作正常,但我在 Opera Mini 上遇到了一个问题,它根
我使用 CSS3 制作了一个圆圈,但在旧版浏览器(ie7 等)中出现了问题,圆圈显示为正方形。 我知道我可以使用背景图片作为备份,但这不是违背了使用代码的意义吗? 如果我要放入背景图像,它会放在 CS
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我在 iOS 应用程序中使用 stringsdict 功能进行本地化。该应用程序是英文的,正在本地化为法语。因此,我有一个英语版本作为基础,一个法语版本用于翻译。 如果作为用户,我将我的语言设置为其他
使用 .css() 进行回退的正确方法是什么?这最常用于字体后备,但我将它用于光标图像。 这是我得到的不起作用的东西: $("#dragable").css('cursor','url(images/
我正在使用 CDN 加载 Bootstrap.css。 我的问题是如何检查 CDN bootstrap 是否已加载/找到。 如果不是,则加载本地 Boostrap。 这是 Jquery 后备..
我是 NGINX 的新手,正在迁移服务器。我还没有完成新服务器上的所有内容,所以我希望它与新服务器匹配,除非该资源或路径不存在。如果是这样,我想将其发送到旧服务器。有没有办法做到这一点? 最佳答案 我
这是一个经典的后备解决方案。如果第一个 el 没有被渲染,那么它会使用其他渲染器重试。如何最好地重构它? 这段代码的问题在于: 渲染器需要位于数组中,但在这里,它们位于 then block 中。 当
我正在设置一个可变参数模板函数,以便能够在特定系列的类上调用各种函数重载。到目前为止,我已经能够在将不受支持的类传递给函数时“中断”编译,但我希望能够提供有效的回退以在运行时处理“不受支持”的情况。
我正在尝试在表单提交上创建一个 JSON 对象以传递给 Perl。我有几个嵌套的 div 和 ul 和 li 来允许 jQuery-ui 可排序。 为了能够保存排序后的 li(分布在多个 div 上)
ASP.NET 对于我使用的每个 appSetting,我想指定一个值,如果在 appSettings 中找不到指定的键,该值将被返回。我正要创建一个类来管理这个,但我认为这个功能可能已经在 .NET
我刚开始使用 ApacheKafka。我设置了整个事情,现在我试图在现有的 Java 应用程序中通过日志附加器引入 Kafka 发送日志。此应用程序使用 Logback 作为记录器库。所以,我猜,这让
回退 document.addEventListener('DOMContentLoaded',function(){/*code here*/}) 最佳答案 来自 MDN : Internet Ex
我一直在尝试编译一个 Android 应用程序,但我收到错误提示 java: non-static method canGoBack() cannot be referenced from a sta
我查看了无数答案并尝试了所有方法(似乎),但我仍然无法放松身心。 我有一个 Storyboard序列: 导航 Controller -> 主界面 Controller -> 导航 Controller
您知道是否有一种方法可以将媒体查询的完全相同的内容渲染到 LESS 中的类中? 为了解释我的情况:我先做移动,并试图避免被媒体查询覆盖。不幸的是,这最终排除了 ie8 及以下版本,因为大多数桌面样式都
有人建议我通过“@support”以下列方式组合 css-grid 和 css-table:支持网格的浏览器应该使用网格,不支持网格的浏览器回退到默认的表格样式。 现在看来,我的网格布局无法建立,即使
MathML是一种编写数学的网络标准,可以轻松缩放而无需像素化(就像 SVG)、复制和粘贴以及屏幕阅读器阅读。 Chrome 拒绝在存在 JavaScript polyfill 的基础上实现它。 (I
我是一名优秀的程序员,十分优秀!