Почему .htaccess блокирует доступ к файлу .php

#.htaccess #webserver

#.htaccess #веб-сервер

Вопрос:

У меня есть файл .htaccess на моем веб-сервере, который удаляет index.php с моего URL. Проблема возникает, когда я хочу получить доступ к файлу .php, расположенному в подкаталоге моего веб-сервера.

Мой файл htacess выглядит следующим образом:

 # Turn on URL rewriting

RewriteEngine On

# Installation directory

RewriteBase /


# Protect application and system files from being viewed

RewriteRule ^(?:application|modules|system)b.* index.php/$0 [L]


# Allow any files or directories that exist to be displayed directly

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL

RewriteRule .* index.php/$0 [PT]
  

И теперь, если бы я хотел получить доступ к файлу .php, подобному этому:

http://www.mydomain.com/subfolder/assets/17041f49/tiny_mce/tiny_mce_gzip.php

Сервер вернул ошибку 500.

Что я должен сделать, чтобы исправить это?

Спасибо.

Комментарии:

1. Посмотрите в журналах ошибок сервера. Он сообщит вам, какая часть .htaccess ему не нравится.

2. В файле, скорее всего tiny_mce_gzip.php , ошибка, которая вызывает проблему — если вы удалите .htaccess файл, вы все еще получаете ошибку?

3. Я исправил это сейчас, изменив разрешение файла для mydomain.com/subfolder/assets/17041f49 к 555. Теперь все работает. Почему это?

4. Да, даже после удаления .htaccess с веб-сервера он по-прежнему возвращает ошибку 500. Если я изменю tiny_mce_gzip.php поскольку он содержит только echo ‘a’, он по-прежнему не работает.

5. Ну и что, где были разрешения до того, как вы изменили их на 555 (И это довольно странно, обычно хотелось бы, чтобы в каталоге было 755, чтобы владелец также мог в него записывать. Опять же, журналы ошибок расскажут вам, в чем заключается реальная проблема..

Ответ №1:

Может быть, вы могли бы попробовать:

 RewriteRule ^(.*).(css|js|xml|ico|png|gif|jpe?g)$ $1.$2 [L]
RewriteRule ^.*$ index.php [L,QSA]
  

Затем получите запрошенный URL в usig PHP

 $url = $_SERVER["REQUEST_URI"];