проблемы перенаправления htaccess - PullRequest
0 голосов
/ 07 августа 2009

Мой .htaccess выглядит так:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !(\.gif)|(\.jpg)|(\.png)|(\.css)|(\.js)|(\.php)|(\.swf)|(\.xpi)|(\.ico)|(\.src)$ 
RewriteCond %{REQUEST_URI} ^(.*)$
#RewriteCond %{REQUEST_FILENAME} ! -f

RewriteRule (.*)$ view.php?picid=$1 [L]

Проблема в том, что когда я посещаю www.example.com, он отправляет меня на view.php. В моем корневом каталоге есть файл index.php. Как получить .htaccess, чтобы игнорировать файл индекса?

Ответы [ 2 ]

1 голос
/ 07 августа 2009

Попробуйте это правило:

RewriteCond %{REQUEST_URI} !.*\.(gif|jpg|png|css|js|php|swf|xpi|ico|src)$ [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) view.php?picid=$1 [L]

Важные изменения, которые я сделал:

  • Регулярное выражение в вашем первом RewriteCond неверно. Якорь $ применяется только к последнему варианту изменения.
  • Вторая директива RewriteCond бесполезна.
  • Третий RewriteCond, который закомментирован, будет делать то, что вы хотите: Проверьте, может ли запрошенный путь URI быть сопоставлен с существующим файлом.
  • Изменен квантификатор с ноль или более до один или несколько символов. Это исключит пустой путь URI при запросе /.
1 голос
/ 07 августа 2009

Удалите # из четвертой строки и удалите пробел между восклицательным знаком (!) И -f

RewriteCond %{REQUEST_FILENAME} !-f

В этой строке написано, что если файл еще не существует на сервере, в данном случае index.php, продолжите и выполните переписывание, которое следует.

Также убедитесь, что у вас есть DirectoryIndex, а также проверка на наличие любых допустимых каталогов.

DirectoryIndex index.php

RewriteCond %{REQUEST_FILENAME} !-d

Что оставит вас с этой более чистой версией:

DirectoryIndex index.php

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ view.php?picid=$1 [L]

Сначала устанавливается index.php в качестве файла по умолчанию. Затем вы запускаете механизм перезаписи и, если запрошенный файл еще не существует на сервере как файл или каталог, передаст данные в файл view.php и выполнит его магию.

...