2013-09-05 6 views
1

Как я могу использовать mod_rewrite для отправки определенных типов входящих URL-адресов в определенный файл на сервере?Использование Apache mod_rewrite для отправки всех запросов в файл

В идеале любые запросы 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 запросы (Jpgs, 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] 

Есть ли способ перейти непосредственно к файлу без перенаправления?

Спасибо!

Том

ответ

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.

+0

Цените свою помощь. Вопрос о вашем значении корневого каталога. Будет ли это перенаправление на фактический файл в папке на сервере (полный путь = /var/www/sites/processor.php) или просто на файл в каталоге htdocs (http://www.mydomain.com/urlprocessor. PHP)? –

+0

Prix, см. Мой отредактированный комментарий выше. Thnx. –

+0

@TomS. вы можете перенаправлять только то, что находится в корневой папке виртуального хоста. Поэтому, если корневая папка виртуального хоста - '/ var/www /', вы можете использовать '/ sites/urlprocessor.php', и он будет использовать'/var/www/sites/urlprocessor.php', однако, если его файл за пределами корень тогда это не сработает. Чтобы использовать файл и/или папку, не находящуюся внутри виртуального хоста, вы можете попробовать использовать символическую ссылку, которую можно создать в linux с помощью команды 'ln -s/path/to/file/destination/filename', тогда вы сможете использовать файлы за его пределами, если у них есть надлежащее разрешение на его использование. – Prix

Смежные вопросы