我希望将/ 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>
答案 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/
开头也不以列出的文件扩展名之一结束的每个请求。