首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >国防部重写在条件下忽略数字,如何使其考虑到数字?

国防部重写在条件下忽略数字,如何使其考虑到数字?
EN

Stack Overflow用户
提问于 2021-12-01 17:53:51
回答 1查看 34关注 0票数 2

所有这些都是在httpd.conf内部完成的,没有.htaccess

我有两个简单的条件。如果url中包含字符串"talis“,则直接指向一个文件,否则指向另一个文件。

代码语言:javascript
运行
复制
RewriteRule talis talis.php [L]
RewriteRule . index.php [L]

这篇文章的工作方式与预期的域/t/1/talis/s到talis.php域/t/1/bob/s到index.php

但是当我尝试把数字放进去时,它总是默认为最后一条规则。

代码语言:javascript
运行
复制
RewriteRule talis01 talis.php [L]
RewriteRule . index.php [L]

(请注意talis01)

这将永远是第二个条件。

域/t/1/talis01 01/s转到index.php

域/t/1/bob/s转到index.php

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-01 19:13:37

由于您使用的是相对替换字符串,所以我假设这些字符串位于目录上下文(可能是.htaccess)中,而不是服务器(或虚拟主机)上下文中。第二个规则的模式中的点也是用于目录上下文的。

mod_rewrite并没有“忽略数字”。第一条规则将请求重写为talis.php,而第二条规则则将talis.php重写为index.php

更详细的..。

RewriteRule talis talis.php L RewriteRule .index.php L

在第一个示例中,包含talis的请求被重写为talis.phpL标志导致重写引擎重新启动。在第二次传递时,talis.php也匹配相同的规则,并再次被重写到talis.php。因为URL没有改变,所以处理停止,talis.php接受请求。

如果不是因为第一个规则也匹配talis.php (第一个规则重写的URL ),那么这也会导致请求被重写到index.php

RewriteRule talis01 talis.php L RewriteRule .index.php L

在第二个示例中,包含talis01的请求首先重写到talis.phpL标志导致重写引擎重新启动。talis.php不匹配第一条规则,但它匹配第二条规则,因此第二次将请求重写到index.phpL标志导致重写引擎重新启动。第二条规则匹配(同样),URL不变,因此处理停止,index.php接受请求。

假设您使用Apache2.4,那么最简单的解决方案是在第一个规则上使用END标志,而不是使用L。这将停止重写引擎的所有处理,并防止另一个循环。

例如:

代码语言:javascript
运行
复制
RewriteRule talis01 talis.php [END]
RewriteRule . index.php [L]

尽管通常您会使用更严格的regex和/或条件来确保重写的请求不会被任何指令重新匹配(如果不是这样的话)。例如:在没有任何条件的情况下看到第二条规则是不寻常的,因为这实际上是将所有东西重写到index.php,包括对index.php本身的请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70189038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档