2

我需要将特定格式的所有 URL 重写为匹配的查询字符串 URL,其他所有内容都应该转到 index.php?valid=false

我有:

RewriteRule (^[^\s]{4})/([0-9]{4})/(winter|fall|summer)/([0-9]{4})/?$ index.php?valid=true&subject=$1&course=$2&semester=$3&year=$4 [NC,L]
RewriteRule (.*)/?$ index.php?valid=false [NC,L]

第一条规则很好用:4 个字母,4 个数字,秋季或冬季或夏季,4 个数字。似乎第二条规则正在起作用,因为所有内容当前都重定向到该?valid=false页面。但是,即使第一个规则接受的 URL(当第二个被注释掉时)也会传递到第二个,即使它们应该被[L]标志阻止?

我做错了吗?

谢谢!

4

1 回答 1

0

用这个替换你的代码:

RewriteRule (^[^\s]{4})/([0-9]{4})/(winter|fall|summer)/([0-9]{4})/?$ index.php?valid=true&subject=$1&course=$2&semester=$3&year=$4 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)/?$ index.php?valid=false [NC,L]

即仅当 URI 不存在时才执行第二条规则index.php

于 2013-08-02T15:43:42.827 回答