如何使用mod_rewrite将某些类型的传入URL发送到服务器上的特定文件?
理想情况下,任何html请求都会加载一个文件(例如/var/www/sites/urlprocessor.php),然后根据网址确定要求的内容并显示相应的内容。
示例:假设我想要一个网址列出一些'汽车'。我希望以下URL加载urlprocessor.php文件,而不是加载实际页面而不是重定向。
http://www.mydomain.com/cars.html --> /var/www/sites/urlprocessor.php
http://www.mydomain.com/cars.htm --> /var/www/sites/urlprocessor.php
http://www.mydomain.com/cars --> /var/www/sites/urlprocessor.php
另一方面,非html请求(jpgs,pdfs等)将继续正常运行而不加载urlprocessor.php文件。
我目前正在使用下面的最后一行代码来完成此任务。它301将所有html页面请求重定向到'index.html',然后加载urlprocessor.php文件。我更喜欢在没有301重定向的情况下加载文件。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^mydomain\.com
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
RewriteRule !^.*(\.gif|\.GIF|\.png|\.mp3|\.m3u|\.js|\.jpg|\.JPG|\.css|\.swf|\.flv|\.ico|\.wav|\.doc|\.DOC|\.pdf|\.PDF|\.xls|\.XLS|\.txt|\.TXT)$ index.html [L]
有没有办法直接转到文件而不进行重定向?
谢谢!
汤姆
答案 0 :(得分:2)
鉴于/var/www/
是根文件夹,那么这将起作用:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /sites/urlprocessor.php [L]
基本上,这会将任何不存在的文件夹和文件重定向到urlprocessor.php