除了我在 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 中的第一条规则之外,我如何重写所有内容?的主要内容,如果未能解决你的问题,请参考以下文章

htaccess删除除了一个特定文件夹之外的php扩展名

.htaccess 可以使用 3 个相同的参数吗?

子域“m”。与 WordPress 和。 htaccess(在 htaccess 中的重写规则冲突。)

为啥 LAG 除了一行之外的所有内容都返回 null?

转载 .htaccess文件RewriteRule语法规则

如何排除 flexbox 包装中的第一项?