小编Pet*_*rus的帖子

Apache重写 - 重定向通配符子域和处理内部URL缩短

我在重定向通配符子域和处理内部URL缩短时遇到问题.

假设我的应用程序中有一个内部URL缩短器

example.com/b/ABCDE
Run Code Online (Sandbox Code Playgroud)

那会翻译

example.com/book/12345678-the-book-name
Run Code Online (Sandbox Code Playgroud)

引用的脚本/b/(我使用可以处理URL规则的PHP框架)将短ID ABCDE转换为书籍真实ID 12345678(和标题"书名"),然后将书籍的永久URL重定向example.com/book/12345678-the-book-name

所以,每当我在公告板,微博客网站或海报或名片等物理媒体上传播有关图书的链接时,我都会使用短链接(example.com/b/ABCDE而不是永久链接example.com/book/12345678-the-book-name).

接下来,我需要将所有通配符子域重定向到主域(www.example.com),同时保持请求URI,例如

http://random.example.com/book/11111111-some-book -> http://www.example.com/book/11111111-some-book
http://123456.example.com/book/22222222-another-book -> http://www.example.com/book/22222222-another-book
http://abcdefg.example.com/book/33333333-another-book-again -> http://www.example.com/book/33333333-another-book-again
Run Code Online (Sandbox Code Playgroud)

在我使用的所有规则之后添加以下规则

<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
RewriteEngine on

RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

因此,具有example.com域的URL并且没有如下所示的前缀

http://example.com/book/11111111-some-book
Run Code Online (Sandbox Code Playgroud)

将转化为

http://www.example.com/book/11111111-some-book
Run Code Online (Sandbox Code Playgroud)

另一个结果是,如果内部URL缩短器使用没有前缀的普通域,则需要两次重定向才能解析.例如,

http://example.com/b/ABCDE
Run Code Online (Sandbox Code Playgroud)

将首先被重定向到

http://www.example.com/b/ABCDE
Run Code Online (Sandbox Code Playgroud)

然后被重定向到

http://www.example.com/book/12345678-the-book-name
Run Code Online (Sandbox Code Playgroud)

实际上,我不介意两次重定向.但我的SEO顾问说,两次重定向对我网站的搜索引擎优化不利.(我还是不知道为什么)

所以我尝试将最后一条规则改为下面

<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{REQUEST_URI} ^/b/(.*)$ 
RewriteRule . index.php [L]

RewriteCond …
Run Code Online (Sandbox Code Playgroud)

apache mod-rewrite seo redirect

5
推荐指数
1
解决办法
8948
查看次数

相当于Google地图“空闲”事件的传单地图事件

我似乎在Leaflet中找不到与Google Map“ idle”事件相同的map事件。

Google Map事件“ idle”的定义是“当地图在平移或缩放后变为空闲时,将触发此事件”。

https://developers.google.com/maps/documentation/javascript/reference#Map

我尝试了Leaflet的“ viewreset”,“ load”,“ blur”,“ focused”,“ moveend”,但它们与Google Map的“ idle”确实不同。

  • “ viewreset”:仅在完成放大/缩小时执行,而不是在初始和平移后执行。
  • “ load”:仅在初始化时。
  • “ moveend”:仅在平移和缩放时,未初始化。

我能做的最好的就是使用这个

var foo = function(e){
   console.log('Hello');
}
map.on('load', foo);
map.on('moveend', foo);
Run Code Online (Sandbox Code Playgroud)

只是想了解我是否在阅读手册时出错。或者,即使没有等同于Google Map的“ idle”的事件,是否有更好的方法来实现呢?

google-maps leaflet

5
推荐指数
1
解决办法
1772
查看次数

部署后,Yii memcache会话失效

每次我部署我的Yii应用程序时,我都会更改其符号链接/var/www.像这样的东西

rm -f /var/www
ln -s /var/app-version /var/www
Run Code Online (Sandbox Code Playgroud)

但每次执行此操作时,用户会话都会失效(即所有用户都已注销并且CSRF令牌已重置).

对于我使用的会话CCacheHttpSession.像下面的东西main.php

'components' => [
    'memcache' => [
        'class' => 'CMemCache',
        'servers' => [
            [
                'host' => 'localhost',
                'port' => 11211,
            ]
        ]
    ],
    'user' => [
        'class' => 'WebUser',
        'allowAutoLogin' => true,
    ],
    'session' => [
        'class' => 'CCacheHttpSession',
        'cacheID' => 'memcache'
    ]
]
Run Code Online (Sandbox Code Playgroud)

我不确定这种错误配置是在PHP级别还是Yii级别,但我做错了什么?

php yii

4
推荐指数
1
解决办法
927
查看次数

覆盖Angular $ http帖子以使用其他数据扩展每个帖子数据

在Yii框架中,我们必须向POST数据添加C​​SRF令牌,以便可以验证请求.

令牌由PHP生成,我正在传递这样的变量

angular.module('MyConstant', []).constant("MyConstant", 
     {'postdata': {'_csrf': 'ABCDEF'}}); //this is written by PHP

var app = angular.module('MyApp', ['MyConstant']);

app.controller('MyCtrl', [
    '$scope', '$http', 'MyConstant',
    function ($scope, $http, MyConstant) {
}]);
Run Code Online (Sandbox Code Playgroud)

每当我想发送POST时,我都必须做这样的事情.

  $http.post(url, angular.extend(MyConstant.postdata, {data: mydata}));
Run Code Online (Sandbox Code Playgroud)

POST主体将是这样的

 {"_csrf": "ABCDEF", "data": "bla bla bla"}
Run Code Online (Sandbox Code Playgroud)

我只是好奇是否有一个"Angular方式"来覆盖$http.post自动附加数据以避免代码重复,angular.extend(ViewConstants.postdata如上所述.

UPDATE

感谢@GregL的指点.我可以这样做使用interceptors

app.config(['$httpProvider', 'MyConstant', 
    function ($httpProvider, MyConstant) {
    $httpProvider.interceptors.push(function () {
        return {
            request: function (config) {
                if (config.method == "POST"){
                    config.data = angular.extend(MyConstant.postdata, config.data);
                }
                return config;
            }
        };
    });
}]);
Run Code Online (Sandbox Code Playgroud)

http-post angularjs

4
推荐指数
1
解决办法
2635
查看次数

从Google Visualization的ColumnChart中手动选择一个栏

我像这样使用Google Visualization的ColumnChart制作了一个图表。

在此处输入图片说明

它基本上是使用3 x 7矩阵的堆积式柱形图。在每个栏中,我都删除了另外两行的数据。我的问题是如何使黄色条(或其他条)看起来像从一开始就使用Javascript代码被单击。就像下面一样。

在此处输入图片说明

*请注意黄色栏中的浅色边框。

javascript google-visualization

3
推荐指数
1
解决办法
2735
查看次数

组合行时终端命令等效于PHP内爆

我有几行,并希望将该行分组为5,然后将其内爆以进行MySQL IN ()查询.

直到这个我已经做到了

awk '{ printf "%s", $0; if (NR % 5 == 0) print ""; else printf " " }
Run Code Online (Sandbox Code Playgroud)

例如,我想在下面这些行

1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)

成为

1,2,3,4,5
6
Run Code Online (Sandbox Code Playgroud)

如果我用这个

awk '{ printf "%s", $0; if (NR % 5 == 0) print ""; else printf "," }
Run Code Online (Sandbox Code Playgroud)

,如果所有行都不能被5整除,那么输出将在尾随行中

UPDATE

以前的标题是awk而不是bash,但事实证明有比awk更简单的解决方案.我的目标是做这样的事情

$seq 12 | pr -7ats, | xargs -I X echo "SELECT * FROM Table IN (X)" #or execute mysql
SELECT * FROM Table WHERE id …
Run Code Online (Sandbox Code Playgroud)

bash terminal awk

3
推荐指数
1
解决办法
131
查看次数

GCP MQL:重命名监控图表中的线条

我有一个简单的 Google 云监控查询语言,可以根据基于日志的指标显示对 kubernetes 中所有容器的所有请求的计数。查询如下。

k8s_container::logging.googleapis.com/user/service-api-gateway-prod-request-in-count | sum
Run Code Online (Sandbox Code Playgroud)

小部件将如下所示

在此输入图像描述

我想将折线图的长标签重命名为更短的标签,例如“请求计数”。我该怎么做?

google-cloud-platform google-cloud-monitoring monitoring-query-language

3
推荐指数
1
解决办法
2165
查看次数

替换换行符和以下空格,直到文件中的特定字符串

如何使用单线sedperl替换换行符和空格,直到特定字符串?

例如,我想在文件中的字符串'XYZ'之前替换换行符和以下空格。所有以单词“ XYZ”开头的行都将附加在前一行之前(带有一个额外的空格)。

lorem ipsum dolor坐在amet
  XYZ lorem ipsum dolor坐在amet
    xxx lorem ipsum dolor坐amet
  DDD lorem ipsum dolor坐在amet
      XYZ lorem ipsum dolor坐在amet
cccc lorem ipsum dolor坐amet

   XYZ lorem ipsum dolor坐在amet

输出将是

lorem ipsum dolor坐amet XYZ lorem ipsum dolor坐amet
    xxx lorem ipsum dolor坐amet
  DDD lorem ipsum dolor坐在阿梅特XYZ lorem ipsum dolor坐在阿梅特
cccc lorem ipsum dolor坐amet XYZ lorem ipsum dolor坐amet

unix perl sed

2
推荐指数
1
解决办法
163
查看次数

如何在Spring Boot中根据环境变量条件@Autowire到不同的组件实现

我在 Spring Boot 中有一个类似这样的接口和实现类,

public interface Foo {
   String foo();
}

//
import org.springframework.stereotype.Component;

@Component
public LocalFooImpl implements Foo {
   String foo() {
     return "I am local. No network required.";
   }
}

//
import org.springframework.stereotype.Component;

@Component
public RemoteFooImpl implements Foo {
   String foo() {
      return "I am remote. A lot of network required.";
   }
}
Run Code Online (Sandbox Code Playgroud)

我将在 RestController 中使用它。我在想像下面这样的事情。如果我错了,请纠正我,我对 Spring Boot 很陌生。

import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

   @Autowired
   private Foo myFoo;
}
Run Code Online (Sandbox Code Playgroud)

我想,当我在远程环境中运行此控制器时,它将使用该RemoteFooImpl实例,但对于本地开发,它将使用LocalFooImpl. 在远程部署中,我将放置一个环境变量,例如IS_REMOTE=1 …

java spring spring-boot

1
推荐指数
1
解决办法
156
查看次数