用mod_rewrite重写URL

时间:2013-03-22 18:40:40

标签: apache .htaccess mod-rewrite rewrite

我需要重写从http://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?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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