X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> htaccess mod_rewrite БАГ ПАПОК
lensoy
lensoy
Topic Starter сообщение 18.11.2015, 9:58; Ответить: lensoy
Сообщение #1


Привет.
В htaccess стоит общее правило:
[PHP]RewriteRule ^(.*)$ index.php?page=$1 [QSA][/PHP]
Сделано это для того, чтобы решение о том, как и что выдавать пользователю принималось в php файле.
Работает как надо, кроме случаев, когда пользователь пытается зайти в существующий каталог.
К примеру в корне сайта есть папка /css/
Если перейти по ссылке site.ru/css, то url тут же меняется на site.ru/css/?page=css
А нужно, соответственно, чтобы url не менялось вообще.
Замечу, что это происходит только если переходить по ссылке к существующему каталогу. Во всех остальных случаях url не меняется.

К слову
[PHP]Options -Indexes[/PHP]
Не помогло.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Degradator
Degradator
сообщение 18.11.2015, 11:15; Ответить: Degradator
Сообщение #2


index.php?page=$1
?page=$1 вот этот костыль лучше убрать, потому что у тебя есть $_SERVER['REQUEST_URI']

[PHP]
RewriteEngine On

############## remove or add WWW from url ###############
#to add 'WWW' use this:
#redirect http://www.* to http://*
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
#redirect httpS://www.* to httpS://*
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
#to remove 'WWW' use this:
#RewriteCond %{HTTPS} off
#RewriteCond %{HTTP_HOST} !^www\.
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
#RewriteCond %{HTTPS} on
#RewriteCond %{HTTP_HOST} !^www\.
#RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
#########################################################

RewriteCond %{REQUEST_URI} !\.ico$
RewriteCond %{REQUEST_URI} !\.gif$
RewriteCond %{REQUEST_URI} !\.jpe?g$
RewriteCond %{REQUEST_URI} !\.png$
RewriteCond %{REQUEST_URI} !\.bmp$
RewriteCond %{REQUEST_URI} !\.js$
RewriteCond %{REQUEST_URI} !\.css$
RewriteCond %{REQUEST_URI} !\.txt$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA][/PHP]

Вот это
[PHP]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php[/PHP]

проверка не является ли данный запрос запросом на сущесвтующую физически файл/папку
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
lensoy
lensoy
Topic Starter сообщение 18.11.2015, 11:51; Ответить: lensoy
Сообщение #3


Огромное спасибо, Degradator! Это то что нужно. В который раз меня выручаете. А то я уже думал весь движок переписывать. Фух!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Degradator
Degradator
сообщение 18.11.2015, 12:11; Ответить: Degradator
Сообщение #4


Это кстати повод задуматься. Когда тебе помогает деградатор.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 18.11.2015, 14:21; Ответить: miketomlin
Сообщение #5


На самом деле часто достаточно условия "если не файл". Уверен, что ТС-у не слишком нужна особая реакция на обращение по адресу site.ru/css, а нужен доступ к файлам в этой и во всех вложенных папках. Кстати, упомянутый редирект site.ru/css в site.ru/css/?page=css происходит из-за вмешательства другого модуля апача. Нужно отключить для папок добавление слеша в конце пути, если вы используете канонические пути без слеша в конце, и использовать абсолютное имя файла-обработчика (начинающееся со слеша) или директиву RewriteBase. Посмотрите на .htaccess, используемый в большинстве наших движков:
<IfModule mod_dir.c>
DirectorySlash Off
</IfModule>

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule (.*)/*$ http://%1/$1 [R=301,L]

RewriteRule (.*)/+$ /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* /index.php



--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
lensoy
lensoy
Topic Starter сообщение 18.11.2015, 14:51; Ответить: lensoy
Сообщение #6


Да-да, я вот об этом как раз хотел дописать. Что нужно слеш отключить. Но вы меня опередили.

А файлы я тоже внутри php обрабатываю.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
miketomlin
miketomlin
сообщение 18.11.2015, 15:22; Ответить: miketomlin
Сообщение #7


(lensoy @ 18.11.2015, 16:51) *
А файлы я тоже внутри php обрабатываю.
Тогда поставьте другое условие, препятствующее зацикливанию, или разместите статические файлы в скрытой/закрытой папке, чтобы условие срабатывало только для файла движка. Хотя зачем пропускать обращения ко всем статическим файлам через движок, мне не понятно.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как перенести правила переадресации из .htaccess в php обработчик nginx?
0 KrisGuseva 2084 28.12.2019, 7:33
автор: KrisGuseva
Открытая тема (нет новых ответов) Наладить htaccess на Wordpress
2 LebedevStr 1798 25.5.2017, 14:14
автор: LebedevStr
Открытая тема (нет новых ответов) WebKit баг или что это?
0 Fatush 1266 19.5.2013, 16:00
автор: Fatush
Открытая тема (нет новых ответов) Кто найдет как исправить баг, оплачу 2000 руб.
13 zakaznik 5784 3.11.2011, 16:34
автор: zakaznik
Открытая тема (нет новых ответов) Небольшей баг в шаблоне DLE
Помогуте исправить)
9 Simur 3468 17.1.2011, 10:56
автор: Simur


 



RSS Текстовая версия Сейчас: 28.3.2024, 12:31
Дизайн