所有这些都是在httpd.conf内部完成的,没有.htaccess
我有两个简单的条件。如果url中包含字符串"talis“,则直接指向一个文件,否则指向另一个文件。
RewriteRule talis talis.php [L]
RewriteRule . index.php [L]这篇文章的工作方式与预期的域/t/1/talis/s到talis.php域/t/1/bob/s到index.php
但是当我尝试把数字放进去时,它总是默认为最后一条规则。
RewriteRule talis01 talis.php [L]
RewriteRule . index.php [L](请注意talis01)
这将永远是第二个条件。
域/t/1/talis01 01/s转到index.php
域/t/1/bob/s转到index.php
发布于 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.php,L标志导致重写引擎重新启动。在第二次传递时,talis.php也匹配相同的规则,并再次被重写到talis.php。因为URL没有改变,所以处理停止,talis.php接受请求。
如果不是因为第一个规则也匹配talis.php (第一个规则重写的URL ),那么这也会导致请求被重写到index.php。
RewriteRule talis01 talis.php L RewriteRule .index.php L
在第二个示例中,包含talis01的请求首先重写到talis.php,L标志导致重写引擎重新启动。talis.php不匹配第一条规则,但它匹配第二条规则,因此第二次将请求重写到index.php。L标志导致重写引擎重新启动。第二条规则匹配(同样),URL不变,因此处理停止,index.php接受请求。
假设您使用Apache2.4,那么最简单的解决方案是在第一个规则上使用END标志,而不是使用L。这将停止重写引擎的所有处理,并防止另一个循环。
例如:
RewriteRule talis01 talis.php [END]
RewriteRule . index.php [L]尽管通常您会使用更严格的regex和/或条件来确保重写的请求不会被任何指令重新匹配(如果不是这样的话)。例如:在没有任何条件的情况下看到第二条规则是不寻常的,因为这实际上是将所有东西重写到index.php,包括对index.php本身的请求。
https://stackoverflow.com/questions/70189038
复制相似问题