mod_rewrite - 重定向到几个不同的PHP文件

时间:2010-10-19 11:28:17

标签: php mod-rewrite apache2

我希望将/ files /的任何请求重定向到一个php脚本,将所有其他(不是特定文件类型)的请求定向到另一个。无论我尝试什么,我都无法让它发挥作用。这是来自我的apache2虚拟服务器配置文件:

<Directory /var/www/test/public>

RewriteEngine On
RewriteBase /files
RewriteRule ~files/(.+) file-handler.php?id=$1 [L,QSA]
RewriteRule !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php?page=%{REQUEST_URI}

</Directory>

我也试过这个:

<Directory /var/www/test/public>

RewriteEngine On
RewriteBase /
RewriteRule !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php?page=%{REQUEST_URI}
RewriteBase /files
RewriteRule ~files/(.+) file-handler.php?id=$1 [L,QSA]

</Directory>

5 个答案:

答案 0 :(得分:0)

您是否使用过虚拟主机? &LT;虚拟主机&GT; section应该有“RewriteOptions Inherit”

答案 1 :(得分:0)

好吧,我没有解决这个问题,但找到了解决办法 - 我只是重定向到一个PHP文件,然后在那里做逻辑。不知道为什么我之前没想到......

答案 2 :(得分:0)

我认为您的问题与RewriteBase和/或〜文件匹配有关。您是否尝试使用一个基础,并将其用于您的规则?不完全确定你的规则是什么,但

RewriteEngine On
RewriteBase /
RewriteRule ^files/(.+) /file-handler.php?id=$1 [L,QSA]
RewriteRule !.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$ /index.php [L,QSA]

您可以直接在PHP中使用$_SERVER['REQUEST_URI']

要尝试的另一条路径是多个<Directory>部分(一个用于子目录,一个用于根目录)。

但是,正如您所指出的那样,只需插入一个PHP文件并重定向就可以更容易调试。

答案 3 :(得分:0)

RewriteCond ^files/(.*)\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$
RewriteRule file-handler.php?id=$1 [L,QSA]
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

未经测试,但我认为它会起作用。

第一行:匹配以上列表中的www.example.com/files/*.<file类型的任何请求&gt;

第二行:重定向匹配到file-handler.php?id =&lt;从上面匹配&gt;

第三行:匹配其他所有内容

答案 4 :(得分:0)

请尝试以下规则:

RewriteRule ^files/(.+) file-handler.php?id=$1 [L,QSA]
RewriteCond %{REQUEST_URI} !\.(pdf|gif|jpg|png|css|swf|txt|php|ico|html|js|xml|flv)$
RewriteRule !^files/ /index.php?page=%{REQUEST_URI} [L]

第一个规则匹配每个请求的URI路径(没有上下文路径前缀,请参阅RewriteBase directive)以files/开头。第二条规则匹配路径既不以files/开头也不以列出的文件扩展名之一结束的每个请求。