小编Jam*_*ith的帖子

如何让mod_rewrite只匹配一次规则

我有以下网址...

HTTP://localhost/http.mygarble.com/foundationsofwebprogramming/86

...我想转换成以下内容:

HTTP://localhost/http.mygarble.com/php/blog.php子域= foundationsofwebprogramming&页=岗位&标签= 86

我以为我可以通过以下规则实现这一目标:

RewriteRule ([^/]+)/([^/]+)$ php/blog.php?subdomain=$1&page=post&label=$2 [NC,L]
Run Code Online (Sandbox Code Playgroud)

但是,我发现重复应用此规则,导致内部服务器错误.我理解,当使用此规则转换URI时,生成的URI也将匹配规则,因此它将再次无限应用.

我之前(不可否认的是相当朦胧)的理解是[L]标志会停止进一步处理,虽然我现在明白这只是意味着只跳过规则的其余部分,并且不会阻止重写引擎再次运行规则.

我可以通过添加以下条件来解决此问题...

RewriteCond $0 !php/blog.php
RewriteRule ([^/]+)/([^/]+)$ php/blog.php?subdomain=$1&page=post&label=$2 [NC,L]
Run Code Online (Sandbox Code Playgroud)

...或者通过编写更具体的正则表达式.但我真正想做的是找到一种方法来阻止重写引擎在匹配一次此规则后尝试任何进一步的匹配.这可能吗?

非常感谢.

apache mod-rewrite

7
推荐指数
2
解决办法
5504
查看次数

为什么“remotes/origin/HEAD”有时会映射到“origin/master”,有时则不会?

在我的一些存储库中我看到......

> git branch --all
* master
  remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

...而在其他人中我看到:

> git branch --all
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

前者让我觉得正确,后者让我不安。这里发生了什么?

我之前已经添加了一个common映射到不同存储库的附加分支,并且设置它可能会导致问题。这个额外的分支现已被删除,但后一个存储库中的这个奇怪的设置仍然存在。任一存储库中都没有额外的遥控器,只有标准遥控origin器。

在我看来,第一个remotes/origin/master是 的缩写remotes/origin/master -> origin/master。只有当本地和远程分支在某些方面有所不同时,才需要明确说明映射吗?那么,有这种奇怪的remotes/origin/HEAD -> origin/master映射吗?如果用这个词来形容的话,那么这似乎是优先的?

git github

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

标签 统计

apache ×1

git ×1

github ×1

mod-rewrite ×1