вопросы ЧПУ, Mod_rewrite, Htaccess

  • Автор темы Автор темы Kauperwood
  • Дата начала Дата начала
K

Kauperwood

Хелло! Возникли проблемы с написанием ЧПУ, а точнее непонятки. у меня убунта, в файле /etc/apache2/sites-available/default стоят AllowOverride All.
Непонятка1: Лезу создавать .htaccess в корневой папке, создаю, а он исчезает (даже через ls в терминале не видно), создаю новый файл .htaccess в другой папке(в той же не дает создать) копирую в ту же папку - предлагает заменить! Он работает но его вообще не видно, неудобно его редактировать однако. :mellow:
Непонятка2: У меня к index.php подключен callbacks.php в котором через свич инклудяться html статьи. Строка выглядит "www.site.net/index.php?action=servise", хочу естественно "www.site.net/servise". Читал как делать ЧПУ, народ предлагает делать через .htaccess в несколько строчек, запустил phpinfo() - mod_rewrite в модулях есть. Дальше не все понятно, пробую, не выходит, подвис на этой теме, спасибо что читаете этот пост. Движка у меня нет, проблема сто раз уже решалась наверно, но все же, как написать правильно в .htaccess? За правильный ответ репу качну 100%. Подскажи добрый человек.
 
В .htaccess написать:

PHP:
RewriteEngine on # включает mod_rewrite
RewriteRule ^([-a-zA-Z0-9_]+)/? index.php?action=$1 [L]

И тогда www.site.net/servise будет работать как www.site.net/index.php?action=servise
 
Верно, но он почему то дает мне 500 Internal Server Error.
С чем ето может быть связано?
 
Можно полностью содержание .htaccess сюда?
 
эти 2 строчки и все, кроме них ничего больше не добавлял.
 
Есть еще один способ, но тут придется указывать домен (не всегда удобно, если доменов несколько)

PHP:
RewriteEngine on #можно попробовать не писать, если по умолчанию включено.
RewriteCond %{REQUEST_URI} ^/([-a-zA-Z0-9_]+)$
RewriteRule .* http://site.ru/?action=%1 [R=301,L]
 
попробовал - вывод зделал, решения нормальные, должно роботать. Ошибку он уже не дает, а попросту дает страницу про автора, так как будто я не указал какой то из внутренних адресов ниже

У меня вот такой нубский код обрабатывает метатеги, и если я не укажу какой то либо запрос "action" в этом файле, сервер мне возвращает только одну страницу, почему то статью про автора (.htaccess та же ситуация, - дает одну страницу ) :
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">titles.php</div></div><div class="sp-body"><div class="sp-content">
PHP:
$names = ($_GET['action']);
if ($names == ($_GET['action']="")) {$t = "Морда"; $m="Лицо";$k="что я хочу тут видеть.";$r="index,follow";}
elseif ($names == ($_GET['action']="hosting")) { $t = "Хостинг"; $m="хостинг"; $k="хосты";$r="index,follow";}
elseif ($names == ($_GET['action']="sevenways")){ $t = "Способы похудеть";$m="Кто хочет тот худеет."; $k="кушайте ягоды.";$r="index,follow";}
//// обычные страницы
elseif ($names == ($_GET['action']="about_grub2")){$noparams = "тут пусто";$r="noindex,nofollow";}
elseif ($names == ($_GET['action']="about_partitions")){$noparams = "тут пусто";$r="noindex,nofollow";}
elseif ($names == ($_GET['action']="kontakts")){$noparams = "тут пусто";$r="noindex,nofollow";}
//// страницы что обрабатываються через js

подключаемый файл такой:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">callbacks.php</div></div><div class="sp-body"><div class="sp-content">
PHP:
switch($_GET['action']){
////...
case 'about_autor':
include('content/active/about_autor.html');
break;

default: 
include('content/all/the_morda.html');
break;
if (isset($_GET['action'])){
$to = $_GET['action'];
if (strpbrk($to, '.?/:*<>')) die('символы ., ?, /, :, *, <, > в запросе запрещены');
}
}

Получаеться что .htacces сработал, но тогда получаеться перестает работать система с метатегами и возвращает 1 страницу (первое что пришло в голову).
Может быть бок в этом?
 
Тоесть
www.site.ru/hosting (www.site.net/index.php?action=hosting)
www.site.ru/sevenways (www.site.net/index.php?action=sevenways)
и т.д. - отправляют на
www.site.ru/kontakts (www.site.net/index.php?action=kontakts)
??
 
просто возвращает одну и ту же страницу куда бы я не нажимал (это наверно потому что перестает работать скрипт с мета-тегами)
 
Вроде разобрался. Забыли одну строчку!
PHP:
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*)\.htm$ /index.php?action=$1
решение увидел через генератор

таким способом получаться ссылки вида : "www.site.net/page.htm"


ps. теперь самой вершиной было бы еще избавиться от росширения .htm :mellow:

мысли вслух: вот не пойму почему если убираю ".htm" ставлю "/" или вообще ничего не ставлю - тогда у меня падает ксс))
мысли вслух 2: хм.. роботы наверно тоже проходят через .htacces, наверно им пофиг))
 
"избавиться от росширения .htm"
Просто убрать .htm и ссылки на ксс (и на все остальное типа js) сделать относительно корня сайта ("/styles/style.css")
 
RewriteEngine on # включает mod_rewrite
RewriteRule ^([-a-zA-Z0-9_]+)/? index.php?action=$1 [L]

вот это выдает ошибку пицот потому что регулярка должна быть такая
RewriteRule ^([-a-zA-Z0-9_]+)$ index.php?action=$1 [L]
если на то пошло..

Дальше топик не читал.
 
вот на досуге вопросик появился, вобщем в папке сайта лежит файлик текстовый в котором служебная информация не для глаз так скзать.
Так вот переименовать файл и закрыть доступ в папку без проблем через .htaccess. А допустим если имя файла известно, он легко открываеться не смотря на закрытый доступ к самой папке.
Пробовал для файла
Код:
<Files *.txt>
Deny from all 
</Files>
и еще несколько вариантов, но не дают они ничего, файл открываеться если знать его имя.
Вопрос как запретить через .htaccess открывать файл, или эта задача другим путем решается?
 
все расчехлился, надо менять расширение txt.
Почему? потому как сказал один господин : .txt файлы кеширует акселератор статического содержимого сайта,
Интересная фраза однако)
 
как все сложно. Да поставить просто расширение php файлу. Или, если принуипиально - запаролить директорию. Как поставить пароль на папку описано в гугле.
 
так и сделал, поменял на php, - единственное так это то что если его в браузере открыть, на новую строку не переводит, все в ряд пока экран не заполниться.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!