好吧,我可以说我的htaccess文件中有以下代码,
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)$ $1.php
RewriteRule ^forums/([0-9]+) forums.php?category=$1 [NC]
我想知道如何使用上面的代码将网址中的某些扩展名重定向到我的网站404页面。
例如,如果此链接mywebsite.com/forums
在其末尾有任何扩展名,例如.asp,.php,.html等,那么它将被重定向到我的404页面。
快速注意如何将最后一个RewriteRule限制为只有某个正斜杠,其中mywebsite.com/forums/2
会显示页面正常,而mywebsite.com/forums/2/so on...
之后的某些限制将被重定向到我的404页面。
有人有什么想法吗?
答案 0 :(得分:1)
如果我理解正确的问题,那么你需要确定正则表达式,以便只匹配你真正想要的模式 - 目前,它们对你的需求有点过于宽松。
例如:
RewriteRule ^([^/]+)$ $1.php
这将匹配没有尾部斜杠的任何内容,而如果您想将其限制为仅匹配(例如,没有尾部斜杠且由字母数字字符组成的内容),则可以执行以下操作:
RewriteRule ^([a-zA-Z0-9]+)$ $1.php
(你可以通过使用先行断言来实现对某些扩展的相同效果,但这会使你的正则表达式变得复杂。我觉得考虑你真正想要匹配的模式可能更安全(并且更容易思考),以及然后预先表达那些。)
同样,你的后一个例子:
RewriteRule ^forums/([0-9]+) forums.php?category=$1 [NC]
将匹配以字符串 forums / 开头的任何内容,后跟一个或多个数字,无论之后是否有任何内容。如上所述添加结束锚($)
RewriteRule ^forums/([0-9]+)$ ...
将断言字符串在数字后结束。
这取决于如果 mod_rewrite 无法找到匹配项,它将不会尝试任何重写,并且(在该路径上没有任何显式资源)将落到Apache的404处理,然后由你来覆盖。