1

如何使用 mod_rewrite 将某些类型的传入 url 发送到服务器上的特定文件?

理想情况下,任何 html 请求都会加载一个文件(例如 /var/www/sites/urlprocessor.php),然后该文件将确定请求的内容并根据 url 显示适当的内容。

示例:假设我想要一个 url 来列出一些“汽车”。我希望以下 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 请求(jpg、pdf 等)将继续正常进行,而无需加载 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]

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

谢谢!!

汤姆

4

1 回答 1

2

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

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

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

有关如何使用 PHP 处理重定向的更多信息,您可以参考此答案。

于 2013-09-05T02:52:04.360 回答