使用Apache mod_rewrite将所有请求发送到文件

时间:2013-09-05 02:46:00

标签: apache .htaccess redirect mod-rewrite

如何使用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]

有没有办法直接转到文件而不进行重定向?

谢谢!

汤姆

1 个答案:

答案 0 :(得分:2)

鉴于/var/www/是根文件夹,那么这将起作用:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /sites/urlprocessor.php [L]

基本上,这会将任何不存在的文件夹和文件重定向到urlprocessor.php

<强> For more information on how to handle the redirect with your PHP you can refer yourself to this answer.