Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Ошибка 404 и настройка htaccess

на локальном сайте все работает, заливаю на сервер - ошибка
404 Not Found
The requested URL / was not found on this server.

подозреваю, проблема в htaccess:
RewriteEngine On

AddDefaultCharset utf-8

Options -Indexes

<IfModule mod_php5.c>
    php_value display_errors 1
</IfModule>

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f

RewriteRule ^$  index.php [L]


RewriteRule ^admin$    /amicms/index.php?action=login [L]
RewriteRule ^robots.txt$    /robots.php [L]
RewriteRule ^sitemap.xml$    /sitemap.php [L]

RewriteRule ^([^/.]+)$    index.php?lang=$1 [L]
RewriteRule ^([^/]+)/([^/.]+)$    index.php?lang=$1&menu_id=$2 [L]
RewriteRule ^([^/]+)/([^/]+)/([^/.]+)$    index.php?lang=$1&menu_id=$2&action=$3 [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/.]+)$    index.php?lang=$1&menu_id=$2&action=$3&action_id=$4 [L]


Что не так, подскажите.
Ответ: Вторым вариантом можно предположить, что на хостинге не шибко правильно настроенный nginx фронтендом - а он не понимает .htaccess.
Что по этой теме говорит техподдержка хостинга?
Вопрос: Настройка Htaccess ЧПУ

Доброй ночи, вот такая проблема.

Если папка где хранятся модули

Путь:
"/modules/module1/index.php",
"/modules/module2/index.php" ....


Так теперь как сделать в главном htaccess, чтобы по этом модулям можно было переходить так:
"http://example.com/module1",
"http://example.com/module2".

Пояснение:
Когда в адресной строке указываешь: "http://example.com/module1" - надо чтобы он оставался именно так а не переадресовывался на

Заранее спасибо.


XML
1
2
3
4
5
6
7
8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /modules/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /modules/$1 [L]
</IfModule>
Этот код не помогает

Добавлено через 42 минуты
Я тут просто читал статьи, и нашел такую структуру.

можно примерно сделать так , а в htaccess уже настроит.

Вот как думаете правильно ли это, если да до как примерно можно сделать такую логику.
Ответ: Не стал открывать новую тему, так как эта схожа с моим вопросом. Есть строка типа: site.domain/category/subcategory/1908291617275663.html

Такое правило в .htaccess может помочь?

Код
RewriteRule ^([a-z]+)/([a-z]+)/([0-9-]+\.html)/?$ news.php?cat_name=$1&sub_cat=$2&post=$3 [NC,L]
Вопрос: Настройка .htaccess для локального сайта

Я новичок. Создаю сайт пока локально. Но что-то с адресами: открывается только главная страница (она же пока и 404) - что из браузера, что по ссылке на странице.

Использую MODX. Дружественные URL включил, вложенные - пока выключил. В index.html использую тег:
<base href="[[!++site_url]]" />

В .htaccess пока ничего не трогал. Подскажите, что делать?
Ответ:
Програмёр
Он имеет очень низкий порог входа и снабжён достаточной документацией.

html страшноватый правда получается, но это мало кого волнует
Вопрос: Настройка htaccess

Мне нужно сделать редирект через htaccess по таким условиям:

если url сайта

направлять на
index.php?option=com_adsmanager&view=result&ad_city=Киев&search_catid=1&ad_oper=prodam


если url сайта

направлять на
index.php?option=com_adsmanager&view=result&ad_city=одесса&search_catid=1&ad_oper=sdam

Очень надо. Спасибо за ранее.
Ответ: paha444, Зачем такие страшные манипуляции проводить. Нельзя что ли в скрипте получить $_SERVER['REQUEST_URI'], разбить его через explode("/",...) и дальше делать что угодно с этим? Как в обычных ЧПУ делается это.
Вопрос: Настройка htaccess файла

здравствуйте подскажите пожалуйста как в htaccess перевести url на русском, например:
my site/index.php на my site/главная.
my site/kino.php на my site/кино.
заранее благодарю.
Ответ: miketomlin, я что то не понимаю так что надо делать все-таки, и если можно покажите пример заранее благодарю.
Вопрос: htaccess RewriteRule QSA игнорирует js и css

Нужно, чтобы все ссылки на сайте (существующие и не существующие) вели на одну страницу. Но эта страница должна знать, какой был введен Url, и в зависимости от этого печатала бы ту или иную страницу.

Задача эта успешно реализована с помощью htaccess:
RewriteRule ^(.*)$ goto.php?page=$1 [QSA]

Но есть один минус. Страницы типа page.js и page.css (а может и какие-нибудь другие) она игнорирует и открывает как обычно. Это сильная дыра в безопасности и просто некрасиво.

Друзья, подскажите пожалуйста, что можно сделать.
Ответ:
отказался от apache в свое время из-за mod_rewrite.

Как apache обрабатывает запрос?

идет по конфигу rewrite'ов сверху-вниз
1. смотрит на RewriteCond по порядку, если одно не срабатывает то не выполняет следующее RewriteRule
2. идет с этой(следующей за RewriteRule) строки конфига (я опускаю просмотр и инклуд вложенных .htaccess для запроса) дальше по п.1

Что делает apache когда видит у RewriteRule флаг [L] ?
Думаете он на этом останавливается? Фиг Вам!
Опускает п.2 и создает новый внутренний запрос(уже внутри структур apache, ничего общего с внешним http-запросом). По нему (уже с новым url) переходит к п.1 к самому верху конфига, к самому началу пока не найдет реальный ресурс-обработчик.

Резюмируя: не пытайтесь на апаче писать километровые rewrite-конфиги со множеством кондишнов и рулек.. хоть это все и быстро по меркам человека, но по меркам машины это рекурсивный треш
Вопрос: htaccess в доске объявлений Flynax

Тестирую сейчас значит эту досочку объявлений, по сути более менее всё в ней меня устраивало до сегодняшнего дня.

Пока в системы был всего один язык (по умолчанию English) всё работало прекрасно, сегодня решил добавить ещё пару языков, и всё перестало работать. Я конечно не уверен что проблема именно в htacsess файле, но внутренне чутьё мне подсказывает, что именно в нём что-то не то.

ссылки вида: site.com/ads/cat/auto/test-19.html (работает)

ссылки вида: site.com/ads/ru/cat/auto/test-19.html (не работает) Перебрасывает на главную.

Сам htaccess выглядит так:

# enable apache morRewrite module #
RewriteEngine on

RewriteBase /ads/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f


# define system languages
RewriteRule ^([^//]+)/?(.{2})?/$ index.php?page=$1 [QSA,L]

# define paging
RewriteRule ^([^//]+)/?(.*)?/index([0-9]*).ht(m?ml?)$ index.php?page=$1&rlVareables=$2&pg=$3 [QSA,L]

# define listing
RewriteRule ^([^/][\w\-\_]+)(.+)-l?([0-9]+).ht(m|ml)$ index.php?page=$1&rlVareables=$2&listing_id=$3 [QSA,L]

# define account details request
RewriteRule ^((\w{2})/)?([\w-_]{3,})$ index.php?page=$3&lang=$2&account_request [QSA,L]

# define single pages
RewriteRule ^([^//]+)/?(^/*)?.ht(m?ml?)$ index.php?page=$1 [QSA,L]

# define other pages
RewriteRule ^([^//]+)/?(.*)?/?(.*)?(.ht(m?ml?)|/+)$ index.php?page=$1&rlVareables=$2 [QSA,L]




Может кто работал с этой системой, как можно исправить этот баг?
Ответ: Кто то уже использует этот скрипт?
Не работает персональная страница пользователя.
site.com/username
Похоже нужно правильно прописать редирект в .htaccess
Сейчас выглядит эта строка вот так
# account request (sub-directory)
RewriteRule ^((\w{2})/)?([\w-_]{3,})$ index.php?page=$3&lang=$2&account_request [QSA,L]
Но не работает.
Кто то решил данную проблему?
Поделитесь пожалуйста.

А вообще скрипт - ОГОНЬ!
Языки и плагины есть. Если кому нужно, пишите.
Вопрос: .htaccess и относительный путь к файлам

Всем привет, извиняюсь за много букв в теме, но напишу подробнее. Я начинающий программист, и вот решил написать свой мини скажем так движок. Сделал себе проект, в денвере все отлично работает, а на хостинге ничего не подключается и не загружается. Думаю что проблема либо в путях, либо в .htaccess файле. Вопросов у меня возникло много, и не могу найти точных ответов, поэтому обращаюсь к Вам) Спасибо тем, кто все осилит и ответит)

Краткая структура:
  • .htaccess
  • index.php
  • application(каталог, содержит несколько папок views, controllers, modules - шаблоны. контроллеры и модули, папочка class для классов и core где пара файлов, отвечающих за разбор URLа и подключения контроллера)
  • css папочка
  • js папочка
  • images папочка

.htaccess (взял из интернета так как с PERL не знаком совсем)
Код PHP
1
2
3
4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Файл conf.php
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// Настройки путей:
// Путь от корня сайта, например: Z:/home/d2arena/www
$server_path = $_SERVER['DOCUMENT_ROOT'];
define('server_path',"$server_path");
define('host', 'http://'.$_SERVER['HTTP_HOST'].'/');
// Константы путей до папок с файлами: ядра, классов, контроллеров, модулей, видов соответственно.
define('core_path','/application/core/');
define('class_path','/application/class/');
define('controller_path','/application/controller/');
define('module_path','/application/module/');
define('view_path','/application/view/');
// Константы путей до папок: с css файлами, javascript файлами, картинок
define('css_path','/css/');
define('javascript_path','/js/');
define('images_path','/images/');
// Дополнительные пути для картинок: аватрки пользователей, логотипы команд
define('user_images_path','/images/avatars/users/');
define('team_images_path','/images/avatars/teams/');
?>
index.php
Код PHP
1
2
3
4
5
6
<?php
//error_reporting(E_ALL);
require_once('configuration.php');
require_once(core_path.'route.php'); // подключение класса route, который анализирует url и будет подключать нужный контроллер
route::start($_SERVER['REQUEST_URI']);
?>
Теперь вопрос, как подключать файлы? На локальном ПК, в денвере, все лежало в корне www/ и тут сразу и index и conf и .htaccess сразу были. Все подключалось. И все пути я всегда прописывал относительно своего index.php так как все подключалось в него.

Например в папочке www/application/class/class_user.php - класс юзер, он использует класс class_db.php по работе с базой данных, и я подключаю его таким образом:
Код PHP
1
require_once(class_path.'class_db.php'); // /application/class/class_db.php вот таким становится строка запроса и все подклчается.
Пример 2: Чтобы где то подключить css файл мог прописать так же относительно каталога где лежит index.php /css/css_file_name.css и все подключалось.

На сервере я должен положить сайт не в корень, а в /home/web/public/ и только тут мой индекс, и у меня все перестанет работать. Собственно как влияет вот эта добавленная вложенность "/home/web/public/", на .htaccess, и все перенаправления? Ведь он начианает работать с уровня на котором он лежит и он там должен перенаправить на index.php а все пути у меня прописаны относительно данного файла и должны в него подключаться? или я что то не понимаю?

P.S.
Пытался добавлять $_SERVER['DOCUMENT_ROOT'] ко всем путям в файле conf.php, возникала ошибка, циклический редирект.
P.S.S. пытался поменять .htaccess файл
Код PHP
1
2
3
4
5
6
7
8
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^black-web
    RewriteRule (.*) http://www.black-web.ru/$1 [R=301,L]
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
    RewriteRule ^index\.php$ http://www.black-web.ru/ [R=301,L]
</IfModule>
Код PHP
1
2
3
4
5
6
RewriteEngine On
#Don't favicon!
RewriteCond %{REQUEST_FILENAME} !^favicon\.ico
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]
Основной вопрос как правильно все-таки составлять пути до папок, файлов и.т.д. и как их стоит подключать?
Ответ:
Сообщение от SEREJA1995
.htaccess (взял из интернета так как с PERL не знаком совсем)
Это не перл
В правиле лучше написать /index.php или использовать директиву RewriteBase. Использовать флаг QSA в данном случае нет необходимости. Флаг L – тоже, но его лучше на всякий случай оставить.

Вам нужно определить пути через местоположение index.php внутри index.php, например:
Код PHP
1
define('PATH',dirname(__FILE__).'/application/');
Можно и через $_SERVER['DOCUMENT_ROOT'], если движок должен работать исключительно в корне сайта, но не в его подкаталогах:
Код PHP
1
define('PATH',$_SERVER['DOCUMENT_ROOT'].'/application/');
Вопрос: Как сделать, чтобы работал .htaccess на localhost?

Добрый день!
У меня не работает .htaccess на localhost.
Хочу сделать банальный редирект, чтобы убрать из адресной строки index.php.
Для этого в httpd.conf поменял AllowOverride none на AllowOverride All и раскомментировал строку LoadModule rewrite_module modules/mod_rewrite.so.
В phpinfo() указано Loaded Modules: mod_rewrite, т.е. должно быть все нормально.
В папке рядом с файлом index.php создал файл .htaccess и в нем написал следующее:
PHP:

  1. AddDefaultCharset UTF-8
  2. RewriteEngine On
  3. RewriteRule ^index.php$ / [QSA,R]

Но когда пишу localhost/folder/index.php, то появляется главная страница, но и адресная строка остается такой же, т.е. не происходит редиректа на localhost/folder/
Как это исправить, чтобы .htaccess работал?
Спасибо!

Решение, чтобы сервер понимал htaccess!
В httpd.conf вместо
CODE (htmlphp):

  1. <Directory />
  2.   AllowOverride All
  3.   Require all denied
  4. </Directory>

надо написать
CODE (htmlphp):

  1. <Directory C:\Server\data\htdocs\folder\>
  2.     AllowOverride All
  3.     Order allow,deny
  4.     Allow from all
  5. </Directory>

где folder\ - это папка, в которой лежит index.php и .htaccess

(Отредактировано автором: 03 Февраля, 2016 - 13:36:15)

Ответ:
sympler пишет:

Выбирай любой вариант или все сразу )
1. Поставь денвер, в нем из коробки все работает, не будешь мучиться
2. Можешь редирект прям в пхп сделать с помощью функции header
3. Регулярку неверно указал, укажи так
RewriteRule index.php$ / [QSA,R]


1. Та хотелось бы без Денвера, чтобы понимать как это работает)
2. Да, это было бы самое простое решение, но хочу в целом разобраться с этим файлом и его возможностями и просто начал с самого простого, но сразу столкнулся с проблемой.
3. К сожалению, не работает. У меня не происходит ничего, чтобы я ни писал в htaccess, проблема в том, что он просто игнорируется.
(Добавление)
sympler пишет:
Выбирай любой вариант или все сразу )
1. Поставь денвер, в нем из коробки все работает, не будешь мучиться
2. Можешь редирект прям в пхп сделать с помощью функции header
3. Регулярку неверно указал, укажи так
RewriteRule index.php$ / [QSA,R]


Все, получилось сделать так, чтобы сервер видел .htaccess, не до конца оказывается дописал настройки в httpd.conf, описание для таких же, как я, в описании добавлено.

Но теперь проблема с тем, чтобы перенаправиться из localhost/folder/index.php в localhost/folder. Если пишу как в описании, или как вы написали, то меня перекидывает в браузере в каталог localhost, а если написать вот так:
CODE (htmlphp):

  1. RewriteRule ^.* https://www.google.ru/ [R]

то перехожу на сайт гугл, все норм. Т.е. неправильно написано регулярное выражение. Подскажите, как его подправить, чтобы корректно работало?
Вопрос: Сделать route.php как .htaccess

При настройке возникла проблема изменить
.htaccess

PHP
1
2
3
4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
на файл route.php
правильно ли будет сделать просто
PHP
1
2
<?php
include_once 'index.php';
Ответ:

Не по теме:

pav1uxa,

Сообщение от kamenb
я делаю настройку раутинга для PhpStorm, router script
В настройках PhpStorm "router script" есть только в при запуске через встроенный в php сервер