2013-03-09 2 views
3

UPDATE: Проблема решена
После многих часов, я наконец-то понял, что проблема была в разрешении папки (757 вместо 755).Htaccess RewriteCond -f вопросы

Черт, я чувствую себя идиотом, но, по крайней мере, проблема решена :)

Спасибо всем!

У меня возникла странная проблема с моим .htaccess и mod_rewrite.

В настоящее время, у меня следующий .htaccess на моем корне:

Options +FollowSymLinks 
Options -MultiViews 

RewriteEngine On 

RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule . /index.php [NC,L] 

Проблема заключается в том:
Я хочу, чтобы иметь возможность получить доступ к любому существующему файлу.

т.е. mysite.com/anydir/myfile.png -> открыть anydir/myfile.png
- mysite.com/anydir/script.php -> открытая anydir/script.php
- MySite .com/file.png -> открытая file.png
- mysite.com/notadir/imnotafile -> перепишем

Но, все работает, за исключением второго пункта. У меня есть file.php в моей test папки, но когда я делаю mysite.com/test/file.php, это держать переписав его, и он не должен ...

Что я делаю неправильно?

+0

Добро пожаловать в переполнение стека! (: –

+0

@GabrielSantos Спасибо :) –

+0

Я только что проверил ваш .htaccess и не вижу этого переписывания. Возможно, это проблема кеширования. –

ответ

5

Возможно сделать трюк:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

UPDATE 1

В этой части кода:

RewriteRule ^index\.php$ - [L] 

[L] Остановите процесс перезаписи сразу и больше не применяются правила. Таким образом,

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule . /index.php [NC,L] 

Не интерпретируются.

UPDATE 2:

сервер будет следовать за символические ссылки:

Options +FollowSymLinks 

Сервер отключит мультиобозрение:

Options -MultiViews 

Rewrite двигатель будет включен:

RewriteEngine On 

Базовый каталог для перезаписи будет /:

RewriteBase/

Если запрос соответствовать не существующий файл, по-прежнему:

RewriteCond %{REQUEST_FILENAME} !-f 

Если запрос соответствовать не существующий каталог, по-прежнему:

RewriteCond %{REQUEST_FILENAME} !-d 

Перепишите index.php в нечувствительном случае и прекратите выполнение следующих правил:

RewriteRule index.php [NC,L] 

Итак, попробуйте следовать:

Options +FollowSymLinks 
Options -MultiViews 

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule index.php [NC,L] 
+0

У него все еще есть та же проблема :( –

+0

@HenriqueMouta См. Обновленный ответ. –

+0

Пробовал, все еще переписывая файлы .php (но все другие файлы не переписываются) –

-1

Если вы просто хотите, чтобы избавиться от ошибки 404 можно использовать

ErrorDocument 404 index.php 

Если вы хотите переписать каждую директорию я предполагаю вы должны удалить;

RewriteCond %{REQUEST_FILENAME} !-d 
+0

'RewriteCond% {REQUEST_FILENAME}! -d' = Если запрос не является существующим каталогом, продолжайте. И проблема в следующем:' I хотите иметь доступ к любому существующему файлу.' (который может включать в себя каталоги) –

+0

Ah jeah жаль, что я запутался в другом подобном сообщении с .htaccess xD – Wolfii

+0

Точно @GabrielSanto s. –