Apache mod_rewrite不支持带有-f和-d的现有文件

Apache mod_rewrite不支持带有-f和-d的现有文件,apache,file,mod-rewrite,Apache,File,Mod Rewrite,我想重定向不存在文件或目录的URL,目的是实现缓存。配置(在httpd.conf中,而不是在.htaccess中)如下所示: <Directory /srv/xxx/htdocs> Options FollowSymLinks +Indexes RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond

我想重定向不存在文件或目录的URL,目的是实现缓存。配置(在httpd.conf中,而不是在.htaccess中)如下所示:

    <Directory /srv/xxx/htdocs>
            Options FollowSymLinks +Indexes

            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME}     !-f
            RewriteCond %{REQUEST_FILENAME}     !-d
            RewriteRule ^text/([0-9]+)$             /page.php?id_text=$1  [QSA]
            RewriteRule ^([^/]+/)*([A-Za-z0-9_]+)$  /page.php?url=$2 [QSA]
    </Directory>
从重写日志:

80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (2) init rewrite engine wit
h requested uri /Ovula/Kinderwunsch__ich_will_schwanger_werden
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) applying pattern '^text
/([0-9]+)$' to uri '/Ovula/Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) applying pattern '^([^/
]+/)*([A-Za-z0-9_]+)$' to uri '/Ovula/Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - - [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (1) pass through /Ovula/Kin
derwunsch__ich_will_schwanger_werden
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula.
xxx.net/htdocs/] strip per-dir prefix: /srv/ovula.xxx.net/htdocs/Ovula/Kinderwunsch__ich_will_schwanger_werden -> Ovula/Kinderw
unsch__ich_will_schwanger_werden
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula.
xxx.net/htdocs/] applying pattern '^text/([0-9]+)$' to uri 'Ovula/Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula.
xxx.net/htdocs/] strip per-dir prefix: /srv/ovula.xxx.net/htdocs/Ovula/Kinderwunsch__ich_will_schwanger_werden -> Ovula/Kinderw
unsch__ich_will_schwanger_werden
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) [perdir /srv/ovula.
xxx.net/htdocs/] applying pattern '^([^/]+/)*([A-Za-z0-9_]+)$' to uri 'Ovula/Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (2) [perdir /srv/ovula.
xxx.net/htdocs/] rewrite 'Ovula/Kinderwunsch__ich_will_schwanger_werden' -> '/page.php?url=Kinderwunsch__ich_will_schwanger_werden'
80.134.205.165 - ovula [17/Aug/2011:08:49:00 +0200] [ovula.xxx.net/sid#2b0573ee35d8][rid#2b0574658288/initial] (3) split uri=/page.php?url=Kinderwunsch__ich_will_schwanger_werden -> uri=/page.php, args=url=Kinderwunsch__ich_will_schwanger_werden

重写条件仅适用于一条规则。如果要将它们应用于集合的所有后续规则,可以使用类似以下内容:

        RewriteCond %{REQUEST_FILENAME}     -f [OR]
        RewriteCond %{REQUEST_FILENAME}     -d
        RewriteRule . - [L]

        RewriteRule ^text/([0-9]+)$             /page.php?id_text=$1  [QSA]
        RewriteRule ^([^/]+/)*([A-Za-z0-9_]+)$  /page.php?url=$2 [QSA]

你能给出一个完整的例子吗?请求的URL与物理文件名?哪个规则不能按预期工作:这一个
/page.php?id\u text=
或第二个
/page.php?URL=
?所有规则都适用?这就是问题所在。它们不应应用于现有文件。奇怪
Kinderwunsch\uuu ich\uwill\uSchwanger\uWerden
可能不是一个符号链接?因为它们有自己的开关,
-s
您应该在第二条规则之前重复您的条件Hello LazyOne,在花了10多分钟试图注册以将此问题标记为已解决后,我宁愿将时间花在其他问题上。无论如何,谢谢你的帮助。解决方案是可行的,但我认为解释是:如果请求文件名是一个现有的文件或目录,那么通过它并停止处理其余的重写规则。
        RewriteCond %{REQUEST_FILENAME}     -f [OR]
        RewriteCond %{REQUEST_FILENAME}     -d
        RewriteRule . - [L]

        RewriteRule ^text/([0-9]+)$             /page.php?id_text=$1  [QSA]
        RewriteRule ^([^/]+/)*([A-Za-z0-9_]+)$  /page.php?url=$2 [QSA]