Existe-t-il une solution élégante pour réécrire l'image longue? Demandez-urls dans cachable_nice_urls, en utilisant uniquement apache htaccess?

C'est une douleur dans le cul-problème! Lorsque le génie résolue cette énigme recevra un don paypal pour manger diner pour deux. Maintenant, commencez. Donné: la plupart des proxies, ne cachez pas les ressources avec un "?" Dans leur URL même si un Cache-control: l'en-tête public est présent dans la réponse. Pour activer la mise en cache du proxy pour ces ressources, je dois supprimer les chaînes de requêtes des références aux ressources statiques et coder les paramètres dans les noms de fichier eux-mêmes *.

AVANT PRÉCÉDENT

<img src="/imgcpu?src=folder1/photo_citty.jpg&w=3500&h=10&c=p&q=90" /> <img src="/imgcpu?src=folder2/photo_doggy.jpg&w=100&h=200&c=p" /> <img src="/imgcpu?src=folder3/photo_birds.jpg&w=200&h=500&f=bw" /> <img src="/imgcpu?src=folder3/photo_frogs.jpg&h=200" /> 

MAINTENANT TRAVAIL

 <img src"/IMG-folder/photo_w100_h100_cf_q60.jpg"/> 
  • Les images résident dans 1 dossier en profondeur sur la racine (jamais plus profond)
  • L'img.php? Src = ou img? Src = sera constamment nommé pour toujours
  • Après le …. jpg & w, & h, & q, & m, & f et & c sont les seules lettres qui exigent des variables (par exemple: & w = 200 & h & = 50 & c = p & f = bw & q = 90) mais tous doivent être facultatifs

AU COÛT DE CE CODE NON ELEGANT

 # Rewrite imgcpu?src= thumbnail maker to nice static urls RewriteCond %{REQUEST_URI} ^IMG.*$ RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+)_q(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3&c=$4&q=$5 [L] RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+)_f(.+)_q(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3&c=$4&f=$5&q=$6 [L] RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+)_f(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3&c=$4&f=$5 [L] RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+)_q(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3&c=$4&q=$5 [L] RewriteRule ^IMG-(.+)_w(.+)_h(.+)_c(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3&c=$4 [L] RewriteRule ^IMG-(.+)_w(.+)_h(.+)_f(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3&f=$4 [L] RewriteRule ^IMG-(.+)_w(.+)_h(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2&h=$3 [L] RewriteRule ^IMG-(.+)_w(.+).jpg$ imgcpu\?src=$1\.jpg&w=$2 [L] RewriteRule ^IMG-(.+)_h(.+).jpg$ imgcpu\?src=$1\.jpg&h=$3 [L] 

Cependant, d'autres possibilités infinies sont toujours découvertes: par exemple, ne couvre pas les cas où premièrement la hauteur est donnée la largeur, etc. Non, cela ne fonctionnera pas! Comment puis-je rediriger les paramètres OPTIONALLY ALL? & W = ou & h = avec quelque chose comme & [az] = (. *) Sothat _h ou _w ou _m sont tous universels et facultatifs et lorsqu'ils sont intervepétés par les URL réécrites et proxy.

Donc, la mission maintenant est:
Réécrivez toutes ou toutes les requêtes qui suivent [photo123.jpg]&[az]=(.*)&[az]=(.*)etcettera dans photo123_X-x_Y-y(optionally more queries).jpg

2 Solutions collect form web for “Existe-t-il une solution élégante pour réécrire l'image longue? Demandez-urls dans cachable_nice_urls, en utilisant uniquement apache htaccess?”

Je suggérerais de remplacer progressivement les champs. Quelque chose dans le sens de:

(Non testé)

 # Rewrite imgcpu?src= thumbnail maker to nice static urls RewriteCond %{REQUEST_URI} ^IMG.*$ RewriteRule ^IMG-(.+)_w([^_]+)(_.*)$ imgcpu\?src=$1\.jpg&w=$2$3 [C] RewriteRule ^(imgcpu[^_]*)_h([^_]+)(_.*)$ $1&h=$2$3 [C] RewriteRule ^(imgcpu[^_]*)_q([^_]+)(_.*)$ $1&q=$2$3 

Et ainsi de suite jusqu'à ce que vous obteniez tous les champs converti un par un au lieu d'essayer de les faire tous à la fois. Chaque règle sera appliquée successivement. Cela devrait fonctionner pour les champs dans n'importe quel ordre et leur permettre d'être facultatif.

Laissez le [C] au dernier de cette chaîne de règles.

Modifier:

Ceci est plus susceptible de fonctionner que l'une des bêtises que j'ai publiées à ce jour:

 # Rewrite imgcpu?src= thumbnail maker to nice static urls RewriteCond %{REQUEST_URI} ^IMG.*$ RewriteRule ^IMG-(.+\/photo_[^_]+)(_.*)*(\.[^.]+)$ imgcpu\?src=$1$3$2/ [C] RewriteRule ^(imgcpu.*\..+)_w([^_]+)(_.*)*$ $1&w=$2$3 [C] RewriteRule ^(imgcpu.*\..+)_h([^_]+)(_.*)*$ $1&h=$2$3 [C] RewriteRule ^(imgcpu.*\..+)_q([^_]+)(_.*)*$ $1&q=$2$3 [C] RewriteRule ^(imgcpu.*\..+)_c([^_]+)(_.*)*$ $1&c=$2$3 [C] RewriteRule ^(imgcpu.*\..+)_m([^_]+)(_.*)*$ $1&m=$2$3 [C] RewriteRule ^(imgcpu.*\..+)_f([^_]+)(_.*)*$ $1&f=$2$3 [C] 

Les principales tentatives d'amélioration impliquent l'astérisque avant le premier signe de dollar qui est destiné à faire fonctionner les choses si le champ réécrit est le dernier dans la chaîne de requête et en changeant le premier [^_]* à .* . Remarquez comment je suis parti en mentionnant le plus gros problème jusqu'à la fin – espérant qu'il ne soit pas remarqué? Attends quoi? Remarquez-vous qu'il tente d'être inaperçu? Parlant de ne pas remarquer … Je viens juste de remarquer que les noms de fichiers incluent des soulignement!

Edit: Fer realz dis time – fer shur!

Modifier:

Essayez ceci au lieu du premier RewriteRule (toutes les autres lignes restent les mêmes).

 RewriteRule ^IMG-(.+\/.*?)(_[hw]\d+)([^.]*)(\.[^.]+)$/imgcpu\?src=$1$4$2$3/ [C] 

Cela dépend que le champ de hauteur ou de largeur soit le premier parmi les champs. Vous pouvez ajouter plus de lettres dans [hw] . Notez cependant qu'un nom de fichier comme le "/IMG-folder/santa_claus_w2_elves_w200_h100_q75.jpg" (Santa Claus w / 2 elves) ne donnerait pas de résultats corrects.

Modifier (15 déc.):

 RewriteCond %{QUERY_STRING} ^(.*\.[^_]*)_(.)([^_]*)(_.*)?$ RewriteRule ^/imgcpu /imgcpu?%1&%2=%3%4 [N] RewriteCond %{REQUEST_URI} ^/IMG.*$ RewriteRule ^/IMG-(.+/.*?)(_[hw]\d+)([^.]*)(\.[^.]+)$ /imgcpu?src=$1$4$2$3 [N] 

J'ai eu un regex qui a fait quelque chose de très similaire une fois, mais avec un peu de format différent. Je l'ai mordu un peu, mais c'est totalement non testé et inachevé (sans parler de la frackin 'HATE regex's), mais j'espère qu'il vous mettra sur votre chemin:

 RewriteRule ^(.*?\IMG-)(.*)_(\?[^_]*)?_([^_]*)_([^_]*)(.*)$ /imgcpu?src=(?2$2&:\?)$4=$5$6 [LP] 

Fondamentalement, il sortira votre première partie de l'URL, puis continuera à boucler jusqu'à ce qu'il n'y ait plus de _ caractères, en les ajoutant au format de &$1=$2 sur l'URL.

Cela signifie que vous devrez utiliser le format de /IMG-folder1/photo_citty_w_3500_h_10_c_p_q_90.jpg mais je suis sûr que vous pourriez résoudre ce problème simplement à un seul personnage plutôt qu'à utiliser le trait de soulignement.

Puis-je vous suggérer de vous rendre la vie beaucoup plus facile si votre délimiteur ( _ ) n'est pas utilisé dans la partie du nom de fichier de l'URL? Il existe de nombreux autres délimiteurs que vous pourriez utiliser (par exemple a - ) qui réduiraient la complexité de vos règles de réécriture.

  • Comment SOAP sur un server proxy que je possède (configuration)?
  • Redirectionner temporairement * toutes les requêtes HTTP / HTTPS dans IIS vers une page "maintenance du server"
  • Site de contenu statique et dynamic mixte utilisant AWS S3 et EC2
  • Le moyen le plus simple pour implémenter la réécriture url pour plusieurs VHost sur Nginx
  • RewriteRule Not Rewriting URL correctement
  • Postfix répond aux courriels adressés à un courrier électronique externe tout en conservant le bon de l'adresse
  • Apache 2.4 avec PHP-FPM. Redirection htaccess
  • request de proxy de modification d'apache url rewrite
  • Routage de trafic d'Apache avec erreur de proxypass
  • IIS URL Rewrite pour agir en tant que gestionnaire 404
  • Comment faire pour que Nginx inclue index.php dans les paths de files pour les sous-directorys aussi (Magento Multistore)
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.