Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: RewriteRule
 
 автор: guitarfan   (30.05.2013 в 12:17)   письмо автору
 
 

Поскольку ваш сайт не пропускает урл, то и что я пытаюсь сделать тоже не смог. Так что пишу только это.
В .htacces пишу так:


AddDefaultCharset utf-8

RewriteEngine on

# если файл или папка, то ничего не делать
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]

RewriteRule ^(.+)/ $1\.php [L]
RewriteRule ^(.+) $1\.php [L]

Все работает как нужно.

А без этого:
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]
Ошибка: Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Я не понимаю, ведь тут только сказано, что если попытка открыть какой-то файл (к примеру exe) или же папку, то не выполнять то, что идет ниже.
Но ведь когда я пишу
мойсайт/index или мойсайт/index/ - это же не папка или какой-то файл (хотя страницу можно считать файлом, но я думаю, что к странице это не относится)

  Ответить  
 
 автор: Sfinks   (30.05.2013 в 13:59)   письмо автору
 
   для: guitarfan   (30.05.2013 в 12:17)
 

> Поскольку ваш сайт не пропускает урл, то и что я пытаюсь сделать тоже не смог.
Это что-то новое. По-моему с урлами тут все в порядке:
Можно просто текстом написать: http://softtime.ru/forum/read.php?id_forum=5&id_theme=89635
Можно BB-кодами обрамить: http://softtime.ru/forum/read.php?id_forum=5&id_theme=89635
Можно и отображаемый текст заменить: Ссылка на эту страницу

> Я не понимаю, ведь тут только сказано, что если попытка открыть какой-то файл
> (к примеру exe) или же папку, то не выполнять то, что идет ниже.

Ну не exe, а просто что это не есть реальный файл, хотя он может быть и без расширения

> Но ведь когда я пишу мойсайт/index или мойсайт/index/ - это же не папка или какой-то файл
Тут дело в том, что когда вы пишете мойсайт/index/, то в mod_rewrite попадает index/ и начинается проверка:
 RewriteCond %{REQUEST_FILENAME} -f [OR]
 RewriteCond %{REQUEST_FILENAME} -d
 RewriteRule . - [L]
-не подходит, правило не сработало.
RewriteRule ^(.+)/ $1\.php [L]
-подходит, сработало.
index/ заменяется на index.php и проверка начинается с начала.
При втором проходе, когда есть правило
 RewriteCond %{REQUEST_FILENAME} -f [OR]
 RewriteCond %{REQUEST_FILENAME} -d
 RewriteRule . - [L]
, то оно срабатывает, т.к. index.php это уже реальный файл и проверка прекращается.
Если же это правило отсутствует, то проверка продолжается:
RewriteRule ^(.+)/ $1\.php [L]
-не подходит, продолжаем:
RewriteRule ^(.+) $1\.php [L]
-подходит. index.php заменяется на index.php.php и проверка снова начинается с начала и mod_rewrite уходит в бесконечный цикл.
Это и есть Internal Server Error.

  Ответить  
 
 автор: guitarfan   (01.06.2013 в 11:58)   письмо автору
 
   для: Sfinks   (30.05.2013 в 13:59)
 

Спасибо

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования