多个重写规则在.htaccess中不起作用

时间:2013-12-24 12:30:39

标签: php .htaccess mod-rewrite

这是我在.htaccess中的代码:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+product\.php\?course_name=([^\s&]+)&course_id=([^\s&]+) [NC]
RewriteRule ^ /%1%2? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([^/]+)([^/]+)/?$ /product.php?course_name=$1&course_id=$2 [L,QSA]

哪个工作正常,但现在我必须检查用户是否在我的网站中输入了错误的地址,例如www.example.com/no-file-exists.php然后它会重定向到我建立的404page.php显示错误消息。 所以我有这个规则RewriteRule ^ 404page.php并把它放在我的代码中然后我的先前规则将被覆盖所以我不知道在哪里放置以使所有规则有效,请帮忙吗?

1 个答案:

答案 0 :(得分:1)

旁注:规则RewriteRule ^([^/]+)([^/]+)/?$ /product.php?course_name=$1&course_id=$2 [L,QSA]似乎是错误的。我想你忘记了/; - )

您可以通过不写另一个重写来解决您的问题,而是为404错误创建一个处理程序。您可以使用ErrorDocumentdocs)执行此操作。你最终会得到这样的东西:

ErrorDocument 404 /404page.php

提醒:如果第二个参数(/404page.php)没有以斜杠(/)开头,那么它将被视为要发送404未找到标题的文本字符串。你不希望这样。