У меня возникли проблемы с тем, чтобы заставить работать следующее:
<IfModule mod_rewrite.c>
DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine On
# If the file is not found in web
RewriteCond web/$1 -f [NC] #<-- This line seems to be the problem.
RewriteRule ^(.*)$ web/$1 [L]
# Then rewrite it to index.php
RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>
Идея состоит в том, чтобы проверить, существует ли файл в веб-каталоге, и, если это не так, направить запрос в index.php.
Кажется, что проблемная строка выше подбирает правильный URL, но не распознает, что файл существует.
Например:
http://localhost/img.gif --> /www/web/img.gif
http://localhost/subdir/file.doc --> /www/web/subdir/file.doc
http://localhost/user/add --> /www/index.php
http://localhost/invalidurl --> /www/index.php
Однако я не могу заставить статические ресурсы обслуживаться правильно, они все перенаправляются в index.php.
Я также хочу, чтобы все URL были относительными; так что я могу сделать этот код многоразовым без редактирования.
Следующий .htaccess выдает внутреннюю ошибку сервера, если я захожу на img.gif:
<IfModule mod_rewrite.c>
DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine On
# If the file is not found in web
#RewriteCond web/$1 -f [NC] #<-- This line seems to be the problem.
RewriteRule ^(.*)$ web/$1 [L]
# Then rewrite it to index.php
#RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>
Этот .htaccess перенаправляет на http://localhost/C:/absolute/path/to/web/img.gif, при посещении img.gif:
<IfModule mod_rewrite.c>
DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine On
# If the file is not found in web
#RewriteCond web/$1 -f [NC] #<-- This line seems to be the problem.
RewriteRule ^(.*)$ web/$1 [R]
# Then rewrite it to index.php
#RewriteRule ^(.*)$ index.php [L,QSA]
</IfModule>
Мой вывод из этого состоит в том, что он получает правильный путь, но какая-то странность заставляет его делать что-то совершенно странное (я даже не знаю, почему у него есть внутренняя ошибка сервера - должно быть 404 не найдено).