2009-08-26 74 views
2

好吧,我还有一个问题,我是这个初学者。如何将这两个.htaccess重写规则合并为一个?

我有这样的重写规则,它正确地重定向查询,但不允许我使用其他目录:

RewriteRule ^([0-9A-Za-z]+)/?$ /query.php?id=$1 [L] 

现在这个重写规则跳过所有这些目录,但现在上面的规则必须是注释掉这个工作。

RewriteRule ^(css|js|admin|pages|includes|images)(/|$) - [L] 

我可以将两者结合吗?如果是这样,怎么样?

+1

难道是操作的顺序吗?所以如果我把第一个重写小册子放在第二个小册子后面,它会起作用吗? – 2009-08-26 19:41:32

回答

4

RewriteRule s按它们在文件中出现的顺序进行检查,因此如果先将css|js|admin|pages|includes|images规则放在第一位,它将首先匹配并在达到其他规则之前停止重写过程。只要确保将[L]标志保留在该规则的末尾即可。

+0

谢谢,只需要确认我所看到的是正确的 – 2009-08-26 19:47:02

0

还有这绝招:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+) query.php?id=$1 [L] 

也就是说,如果文件路径是不是存在的文件或目录,将请求发送到一个PHP脚本(这样你就可以动态地或显示加载一些模块一个有用的404页面)。

+0

谢谢,所以这就像404重定向?我在哪里放置自定义404页面? – 2009-08-26 19:48:25

+0

它重定向到PHP脚本的所有内容(这不是文件或目录),这意味着你可以在那里处理它。如果通过某些内部例程确定请求的URI不存在,则可以发送404状态错误和错误页面内容。 – djc 2009-08-26 20:07:46