htaccess条件+ url重写

时间:2009-11-08 16:56:12

标签: apache .htaccess url-rewriting

目前,我在htaccess中进行了设置,以便example.com/dept/noc转到:example.com/index.php?dept=dept&n=noc using

RewriteEngine On
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ index.php?dept=$1&n=$2 [QSA]
RewriteCond %{SERVER_PORT} 80

我有一个名为upload的文件夹,我如何确保/ upload /文件夹的url重写不起作用(异常),因为

example.com/upload/file.doc不起作用?

3 个答案:

答案 0 :(得分:3)

尝试:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/upload/.*
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ index.php?dept=$1&n=$2 [QSA]
RewriteCond %{SERVER_PORT} 80

答案 1 :(得分:2)

更通用的方法是在URL直接匹配现有文件或目录时添加不重写的条件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

这样您就不必在重写规则中维护/ upload,/ images等文件夹列表。如果/ upload中不存在file.doc,则重写将完成。

答案 2 :(得分:1)

您可以比较特定群组的匹配,如下所示:

RewriteCond $1 !=upload
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ index.php?dept=$1&n=$2 [QSA]

请注意,!=表示字典比较,但您也可以使用正则表达式:

RewriteCond $1 !^upload$
RewriteRule ^([A-Za-z]+)/([A-Za-z]+)$ index.php?dept=$1&n=$2 [QSA]