На сервере стоит линукс дебиан на нем апатч, межсетевой экран, шлюз в инет, сквид. На апатч переадресовываются, те кому запрещен доступ в инет для разъяснения причин. Делается это командой:iptables -t nat -A PREROUTING -s 192.168.102.80 -p tcp -m multiport --dport 80,8080 -j DNAT --to-destination 192.168.102.102
где 192.168.102.80 - адрес должника
192.168.102.102 - адрес этого же сервера, вместо него можно localhost написатьПроблема вот в чем. Если должник лезет на сайт скажем http://www.google.ru/ или http://vk.com/ то его прекрасно перекидывает на http://192.168.102.102/index.html
Если же идет на сайт http://www.google.ru/search?bla-bla или http://vk.com/albums5413524 то выходит сообщение, что станицы не существует.
Такое ощущение, что апатч пытается найти сайт http://192.168.102.102/albums5413524 и так далее. Нужно, чтобы не только из корня сайта, но и из любого другого места пользователя перекидывало на страничку index.html. А потом он мог ходить по ссылкам моего сайта (он из нескольких страниц) Подскажите, как исправить?
> Подскажите, как исправить?Вкурить ман по mod_rewrite апаТча.
> Вкурить ман по mod_rewrite апаТча.Почитал руководства по этому модулю, полезная штука, но сложная (для меня)... Я никогда особо не работал с апатчем и похоже не буду. Он мне нужен только для отображения трех примитивных html страничек связанных простыми ссылками.
Можно готовое решение, что в какой файл и в какое место добавить (можно в общем виде), если не сложно конечно.
RewriteEngine on
RewriteRule ^/$ / [L,QSA]В настройки хоста в конфиге апача.
> RewriteEngine on
> RewriteRule ^/$ / [L,QSA]
> В настройки хоста в конфиге апача.Есть файлы:
ls /etc/apache2
apache2.conf conf.d envvars httpd.conf magic mods-available mods-enabled ports.conf sites-available sites-enabledДобавил эти строки в ранее пустой httpd.conf, остановил, запускаю:
root@102:~# /etc/init.d/apache2 restart
Syntax error on line 1 of /etc/apache2/httpd.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
failed!Походу не туда добавил строки... А где тут настройки хоста? Куда добавить?
Вычитал, что добавлять надо в файл .htaccess
В директории апатча этого файла не было.Создал его командойnano /etc/apache2/.htaccess
Добавил код, сохранил, выполнил
/etc/init.d/apache2 restart
Никаких улучшений. Захожу на softtime.ru/forum/rules.php?id_forum=5 получаю ошибку:
Not Found
The requested URL /forum/rules.php was not found on this server.
Apache/2.2.16 (Debian) Server at www.softtime.ru Port 80
Захожу на softtime.ru - быстро перекидывает, куда надо. Может я чего сделал неправильно?Еще момент интересный: файл .htaccess создался и изменения в нем сохранились. При повторном вводе команды ls /etc/apache2/ его в директории не видно, но при команде nano /etc/apache2/.htaccess он открывается для редактирования с сохраненным в нем вашим кодом.
Плохо быть бестолковым. Этот файл надо добавить в ДОМАШНЮЮ директорию, которая задана в Вашем Веб-сервере. Еще больше "пальцем показываю". В ТУ директорию, которая задана в настройках конкретного сайта (а их может быть много - в случае виртуал-хостов) в качестве DocumentRoot. По секрету скажу, что у Апача еще есть лог-файлы. Они очень часто могут помочь.
> Еще момент интересный: файл .htaccess создался и изменения в нем сохранились. При
> повторном вводе команды ls /etc/apache2/ его в директории не видно, но
> при команде nano /etc/apache2/.htaccess он открывается для редактирования с сохраненным
> в нем вашим кодом.Уууу. Как все запущено. Батенька, Вам бы надо начать с простейшего ликбеза. О том, что такое UNIX и какие команды у него есть и как работают. Ничего "интересного" в том, что Вы написали выше - нет. Есть печальное. Печальное то, что человек не знает прописных истин. То есть - грубо говоря пытается читать учебник по алгебре 6 класса, не усвоив учебник по математике 2-го класса.
> Уууу. Как все запущено.Есть такое - не отрицаю... Расскажите, как эти прописные истины называются и где про них почитать (на русском языке).
Виртуальных хостов у меня нет и надеюсь не будет. Файлы сайта хранятся там, где была тестовая страничка апатча то есть /var/www
В общем я убрал все изменения, которые вносил, сделал следующие:/etc/apache2/httpd.conf
Там пусто.
Добавил строку:ServerName 102
Пропало предупреждение, что не определяется имя сервера.
Открыл:
nano /etc/apache2/sites-available/defaultВ нем:
<VirtualHost *:80>
ServerAdmin webmaster@localhostDocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride none
Order allow,deny
allow from all
</Directory>ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warnCustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory></VirtualHost>
Создал файл для вашего кода в соответствующей директории:
nano /var/www/.htaccess
С содержимым:RewriteEngine on
RewriteRule ^/$ / [L,QSA]/etc/init.d/apache2 restart
Никаких изменений... Пере адресация только с главных страниц сайтов.
В логах пишет сообщения типа:
File does not exist: /var/www/13123
File does not exist: /var/www/favicon.ico
File does not exist: /var/www/complete, referer: http://www.google.ru/search?q=linux+apache+documentroot
Получается не работает пока /var/www/.htaccessМожет еще подсказку дадите? ;)
>> Уууу. Как все запущено.
> Есть такое - не отрицаю... Расскажите, как эти прописные истины называются и
> где про них почитать (на русском языке). То, что Вас так озадачило решается при помощи команды ls -la. :) Первый класс, вторая четверть.Любая кинга по UNIX.
> <Directory /var/www/>
>
> Options Indexes FollowSymLinks MultiViews
>
> AllowOverride none
>
> Order allow,deny
>
> allow from all
> </Directory>.....
> Может еще подсказку дадите? ;)
Дам. В директиве описания директории поменяйте AllowOverride none на AllowOverride yes. Эта директива указывает на то, что файл .htacces можно обрабатывать. Ну и перезапустите Апача, есесвенна.
Моя фраза по ls -la попала в цитируемое поле. Ошибся - прошу прощения. :)
Поправил. Апатч не перезапустился, говорит, что это "yes" синтаксическая ошибка:Syntax error on line 35 of /etc/apache2/sites-enabled/000-default:
Illegal override option yes
Action 'configtest' failed.
The Apache error log may have more information.
failed!Видел на другом форуме, что можно написать параметр all, с ним запускается, но улучшений нет.
> Видел на другом форуме, что можно написать параметр all, с ним запускается,
> но улучшений нет.Я ступил - точно AllowOverride all. Теперь конструкция для .htaccess предлагается такая:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]</IfModule>
Это при условии, что у Вас по дефолту выводится страница index.php. Если index.html - cоответственно, надо поменять имя файла.
И еще должен быть, конечно, подгружен модуль mod_rewrite.
В httpd.conf:
LoadModule rewrite_module modules/mod_rewrite.so
Ну - это у меня так в gentoo. :) Возможно - в Вашем дистрибутиве это где-то в другом месте лежит - всяко бывает.
Через 3 недели попробую, как с отдыха вернусь и отпишусь. Спасибо за помощь!
Все 3 строки AllowOverride none изменил на AllowOverride allnano /etc/apache2/sites-available/default
<VirtualHost *:80>
ServerAdmin webmaster@localhostDocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride all
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>.htaccess теперь с содержимым:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]</IfModule>
У меня по дефолту должна выводиться страница index.html
Апатч пере запустился без ошибок, но проблема не решилась.
> И еще должен быть, конечно, подгружен модуль mod_rewrite.
> В httpd.conf:
> LoadModule rewrite_module modules/mod_rewrite.so
> Ну - это у меня так в gentoo. :) Возможно - в
> Вашем дистрибутиве это где-то в другом месте лежит - всяко бывает.Как это проверить? у меня debian
Заработало!
Модуль этот был отключен.
А включался он так:Подключил модуль: sudo a2enmod rewrite
И перезагрузил apache /etc/init.d/apache2 restartИ после этого всё заработало!!!
СПАСИБО ЗА ПОМОЩЬ!