除了我在 htaccess 中的第一条规则之外,我如何重写所有内容?
Posted
技术标签:
【中文标题】除了我在 htaccess 中的第一条规则之外,我如何重写所有内容?【英文标题】:How can I rewrite everything but my first rule in htaccess? 【发布时间】:2013-08-03 21:20:27 【问题描述】:我需要将特定格式的所有 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]
标志停止?
我做错了吗?
谢谢!
【问题讨论】:
也许见***.com/questions/6797998/… @sgroves 谢谢 - 这是一个信息链接 - 下面的答案对我有用,但该链接中的 rewritecond(或有用的流程图)可能会解决我在不同重写时遇到的另一个问题。 【参考方案1】:用这个替换你的代码:
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
时才执行第二条规则
【讨论】:
太棒了,它有效。但是,它引入了另一个我没有想到的问题。它还重写了我的文件,包括 CSS/Images/JS 等链接,因此它们不会返回正确显示页面所需的实际文件。我似乎已经通过在第二条规则之前包含以下 RewriteCond 来解决这个问题 - 这是在不引入其他问题的情况下正确的方法吗?RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d
是的,确实需要这两项检查以避免重写文件或目录。我已相应地对其进行了编辑。
好的,完美。再次感谢!以上是关于除了我在 htaccess 中的第一条规则之外,我如何重写所有内容?的主要内容,如果未能解决你的问题,请参考以下文章