Лучший способ изменить изображения в / public - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь найти наилучший способ, чтобы все на моем сайте указывало на index.php, за исключением любых изображений / css / javascript, которые все находятся в /public.

Это дваМетоды разделов, которые я пробовал в своем .htaccess, но хотел бы знать, есть ли какие-либо более эффективные методы или способы улучшения любого из них.

Кроме того, я не уверен, какой из них будет лучшесервер (меньше накладных расходов).

RewriteEngine on

RewriteBase /subfolder/
RewriteRule !\.(js|ico|txt|gif|jpg|png|css|pdf)$ index.php
RewriteRule ^.*/public/(.*)$ /subfolder/public/$1

#RewriteBase /subfolder
#RewriteCond %{REQUEST_URI} ^(?!/public/).+ [NC]
#RewriteRule !\.(js|ico|txt|gif|jpg|png|css|pdf)$ index.php [L]

Кто-нибудь есть какие-либо предложения о том, как сделать это наилучшим образом?

Ответы [ 2 ]

1 голос
/ 09 января 2012

Вот что я сделал для своей собственной среды (переменная окружения "STATIC" очень сложна для вычисления, поэтому я удалил "сложную" часть, которая может быть слишком сложной на данный момент):

# if the site is static (i.e. xx.static.mydomain.com)
RewriteCond %{ENV:STATIC} 1
# Try to assign the extension into an EXT variable:
RewriteRule (.*)(\.(css|js|htc|pdf|jpg|jpeg|gif|png|ico)){1}$ $1$2 [NC,QSA,E=EXT:$3]
# (!) if it's an image...
RewriteCond %{ENV:EXT} (jpg|jpeg|gif|png|ico) [NC]
# ...no matter the extension, change it to 'img' :
RewriteRule (.*) - [QSA,E=EXT:img]

# if it's static...
RewriteCond %{ENV:STATIC} 1
# ...and its extension is not empty:
RewriteCond %{ENV:EXT} !^$
# ...and the filename exists in the good dir, i.e. :
# /web/htdocs/mydomain/css/xx.css
# /web/htdocs/mydomain/js/yy.js
# /web/htdocs/mydomain/img/aa.jpg
# /web/htdocs/mydomain/img/bb.gif
# and so on...
RewriteCond %{DOCUMENT_ROOT}/%{ENV:EXT}%{REQUEST_FILENAME}  -f
# file exists => override filename and stop:
RewriteRule  ^(.+) %{DOCUMENT_ROOT}/%{ENV:EXT}%{REQUEST_FILENAME} [QSA,L]

Таким образом, вы можете создать очень хорошую организацию, и когда вы получите один «статический» файл, если вы поместите правила выше в самом начале, они будут отфильтрованы правильно и никогда не будут перенаправлены на index.php.

Таким образом, моя структура каталогов выглядит так (что, я думаю, очень чисто), и вы можете легко сделать то же самое:

/web/htdocs/
    |-- css
    |-- js
    |-- img
    |   `-- prettyPhoto
    |       |-- ...
    |       `-- light_square
    |-- js
    |   `-- openid
    `-- htm
0 голосов
/ 09 января 2012

Если все запросы, не связанные с ресурсами, являются довольно «виртуальными» URL-адресами без соответствующих файлов, тогда лучшим способом будет

#only if it is a request for a file that does not exist
#i.e exlcude resources css etc
RewriteCond %{REQUEST_FILENAME} !-f
#send it to index.php
RewriteRule .* index.php [L]

#send image requests to subfolder public
#if you can modify original resource urls to point to subfolder, this will not be necessary
RewriteRule /public/(.*)$ /subfolder/public/$1 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...