0

我需要从 to 重写 URLhttp://example.com/file.php?id=test&cat=categoryhttp://example.com/file?test&cat=category 只实现了用以下方式重写/file.php路径/file

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?(\w+)$ $1.php [QSA,NC,L]

如何重写 URL 的其余部分?第二个问题:是否可以阻止默认 URL 访问,因此用户必须使用重写的 URL?

4

1 回答 1

1

要检查查询字符串中的值,您需要对QUERY_STRING变量使用 RewriteCond,如下所示:

RewriteCond %{QUERY_STRING} ^([a-z]+)&cat=([a-z]+)$

这表示只有在查询字符串包含一组连续的小写字母后跟一个&符号,然后是“cat =”后跟另一组连续的字母时,才必须执行 RewriteRule。捕获组可以在下一个 RewriteRule 中使用%1%2如下所示:

RewriteRule ^([a-z]+)$ $1.php?id=%1&cat=%2 [L]

您不想使用该QSA标志,因为这会将用户的无效查询字符串附加到重写 URL 的末尾。您可能仍希望使用该NC标志来忽略匹配模式中的大小写,但如果可能,最好使用仅小写的文件名。

关于阻止对最终(.php)路径的请求,我想不出办法来做到这一点,因为即使是最终的 URL 也必须通过 .htaccess 规则,所以禁止访问它会破坏重定向。

于 2013-03-23T13:24:13.990 回答