我想根据URL中路径段的数量进行var today = DateTime.Now;
var startOfWeek = today.AddDays((int)DateTime.Now.DayOfWeek * -1);
var value = result.Where(x=>DateTime.Parse(x.Entry_date1) > startOfWeek
&& DateTime.Parse(x.Entry_date1) < today.AddDays(7))
.Select(x=>x.Entry_value1).FirstOrDefault();
重定向。但是,如果检测到此情况,则不应再评估其他.htaccess
个条件。
假设我有这样的网址:
RewriteRule
,我想使用http://www.example.com/level1/level2/level3/...../levelx
进行重定向,具体取决于URL上“级别”的数量。
例如,如果我有三个以上的“级别”(类似于RewriteRule
)。我想重定向到类似以下内容:http://www.example.com/levels/level1/level2/level3/level4/../100
页
但是我会使用类似的东西:
http://www.example.com/whatever.php?id=100
但是这个问题的关键是创建一个条件,该条件在原始URL上检测到的斜杠数量大于数量(可能是可变的)时起作用。
答案 0 :(得分:0)
.htaccess
中没有常规的“计数”方法。 (您可以定义链接到外部程序的服务器端重写映射,但我认为这超出了此问题的范围。)
如果路径段数量有限,则可以对响应进行硬编码。例如:
RewriteRule ^levels/$ /whatever.php?query=0 [R,L]
RewriteRule ^levels/[^/]*$ /whatever.php?query=1 [R,L]
RewriteRule ^levels/[^/]*/[^/]*$ /whatever.php?query=2 [R,L]
RewriteRule ^levels/[^/]*/[^/]*/[^/]*$ /whatever.php?query=3 [R,L]
RewriteRule ^levels/[^/]*/[^/]*/[^/]*/[^/]*$ /whatever.php?query=4 [R,L]
RewriteRule ^levels/[^/]*/[^/]*/[^/]*/[^/]*/[^/]*$ /whatever.php?query=5 [R,L]
我会使用类似的东西:
RewriteRule ^levels/(.+)/(.+)/(.+)/(.+)/(.+) basedir/whatever.php?id=$5
捕获反向引用不会“计算”它们。 $5
仅保留捕获的第5个子模式的值。这等效于硬编码。但是,请记住,模式.+
也将捕获斜杠(即URL路径段)。因此,当可能有更多正则表达式时,上面的正则表达式仅“计数” 前5 。还有9个反向引用的技术限制。
一种可能的解决方法是为源字符串中找到的每个斜杠(路径段)构建查询字符串(一次添加1个字符)。
例如:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^1*$
RewriteRule ^levels/(.*)/(.*)$ levels/$1-$2?%{QUERY_STRING}1 [N,DPI]
RewriteRule ^levels/([^/]*)$ /whatever.php?query=%{QUERY_STRING} [R,L]
提出以下要求:
http://www.example.com/levels/lev1/lev2/lev3/lev4/lev5/lev6/lev7/lev8/lev9/lev10
将导致外部重定向到:
http://www.example.com/whatever.php?query=111111111
然后在whatever.php
中,计算query
URL参数的长度以确定级别数。由于我们严格计算斜杠的数量,因此“级别”的数量为count + 1。
第一个RewriteRule
通过循环内部重写(N
标志)用连字符(只是任意字符)重复替换原始URL路径中的所有斜杠。在每次迭代中,当斜杠被替换时,我们在查询字符串的末尾附加一个1
。在此示例中,需要DPI
标志(D
iscard P
athname I
信息)以从原始请求中丢弃其他路径信息,否则将附加到重写的路径信息中URL-这是必要的,以防止无限的重写循环(并可能导致服务器崩溃!)。
在URL路径中所有其他斜杠都被替换之后,第二个RewriteRule
触发外部重定向。查询字符串(现在由形式为“ 11111”的字符串组成)作为query
URL参数的一部分附加到重定向的URL。
1
。也许可以根据需要进行调整。