我需要重写从http://example.com/file.php?id=test&cat=category
到http://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?
答案 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规则,所以禁止访问它会破坏重定向