|
OBECNI NA TPC |
|
|
» kyusi 07:11 » Fl@sh 07:10 » resmedia 07:09 » NimnuL 06:58 » PeKa 06:38 » cVas 06:33 » NWN 05:07
Dzisiaj przeczytano 41135 postów, wczoraj 25974
Szybkie ładowanie jest: włączone.
|
|
|
|
|
|
TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
[regex] pomocy z regułą w .htaccess , Tomasz 30/07/11 16:15 W pliku .htaccess mam regułę
RewriteRule ^(.*)\.[^.][\d]+\.(css|js)$ $1.$2 [L]
która służy do wycinania z nazwy pliku http://example.com/style.12345678.css części 12345678 dając w wyniku http://example.com/style.css
Reguła sama w sobie jest dobra, testowana tutaj http://www.regexplanet.com/simple/index.html - działa.
Serwer na którym testuję http://ccs.nazwa.pl/ - jeśli wejdziesz wyświetli się phpinfo().
Tu zaczyna się problem bo serwer zwraza ciąg oryginalny, nie obrobiony reguła. Inne reguły w .htacces działają dobrze a nie mają wpływu na tą, bo szukają innych ciągów.
Pomysł zaczerpnięty ze strony http://stackoverflow.com/...rule-not-picking-up-pa
Cały plik .htaccess
# URL rewriting module activation
RewriteEngine on
# Allow versioning for js and css files
RewriteRule ^(.*)\.[^.][\d]+\.(css|js)$ $1.$2 [L,E]
# End Allow versioning for js and css files
# URL rewriting rules
RewriteRule ^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2$3.jpg [L,E]
RewriteRule ^([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/c/$1$2.jpg [L,E]
RewriteRule ^lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$3&isolang=$1$5 [L,E]
RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2&isolang=$1$4 [L,E]
RewriteRule ^lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$2&isolang=$1 [QSA,L,E]
RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E]
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 [L,E]
RewriteRule ^([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$1 [QSA,L,E]
RewriteRule ^content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms=$1 [QSA,L,E]
RewriteRule ^([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /supplier.php?id_supplier=$1$3 [QSA,L,E]
RewriteRule ^([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /manufacturer.php?id_manufacturer=$1$3 [QSA,L,E]
RewriteRule ^lang-([a-z]{2})/(.*)$ /$2?isolang=$1 [QSA,L,E]
# Catch 404 errors
ErrorDocument 404 /404.php
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>https://www.siepomaga.pl/milosz-mosko - A nie lepiej... , Kilgor-Admin 30/07/11 16:59
... style.css?ver=2011073001Pozdr. Kilgor
Admin Board'a - prościej tak, lepiej chyba nie , Tomasz 30/07/11 17:08
rozwiązanie z rewrite jest przeźroczyste dla klienta z parametrami GET nie. Tutaj dyskutowali o tym http://stackoverflow.com/...ad-cached-css-js-files
Rozwiązanie rewrite na pewno zadziała bez względu czy klient cache'uje wywołania z ?ver czy nie.https://www.siepomaga.pl/milosz-mosko
- dla wszystkich tych, którzy nie rozumieją RegEx a chcieliby , Tomasz 30/07/11 19:08
urozmaicić sobie sobotni wieczór małą łamigłówką, oto opis jak rozszyfrować RegExa z pierwszego RewriteRule'a
# the # instructs the server to ignore the line. used for including comments. each line of comments requires it’s own #. when including comments, it is good practice to use only letters, numbers, dashes, and underscores. this practice will help eliminate/avoid potential server parsing errors.
[F] Forbidden: instructs the server to return a 403 Forbidden to the client.
[L] Last rule: instructs the server to stop rewriting after the preceding directive is processed.
[N] Next: instructs Apache to rerun the rewrite rule until all rewriting directives have been achieved.
[G] Gone: instructs the server to deliver Gone (no longer exists) status message.
[P] Proxy: instructs server to handle requests by mod_proxy
[C] Chain: instructs server to chain the current rule with the previous rule.
[R] Redirect: instructs Apache to issue a redirect, causing the browser to request the rewritten/modified URL.
[NC] No Case: defines any associated argument as case-insensitive. i.e., "NC" = "No Case".
[PT] Pass Through: instructs mod_rewrite to pass the rewritten URL back to Apache for further processing.
[OR] Or: specifies a logical "or" that ties two expressions together such that either one proving true will cause the associated rule to be applied.
[NE] No Escape: instructs the server to parse output without escaping characters.
[NS] No Subrequest: instructs the server to skip the directive if internal sub-request.
[QSA] Append Query String: directs server to add the query string to the end of the expression (URL).
[S=x] Skip: instructs the server to skip the next "x" number of rules if a match is detected.
[E=variable:value] Environmental Variable: instructs the server to set the environmental variable "variable" to "value".
[T=MIME-type] Mime Type: declares the mime type of the target resource.
[] specifies a character class, in which any character within the brackets will be a match. e.g., [xyz] will match either an x, y, or z.
[]+ character class in which any combination of items within the brackets will be a match. e.g., [xyz]+ will match any number of x’s, y’s, z’s, or any combination of these characters.
[^] specifies not within a character class. e.g., [^xyz] will match any character that is neither x, y, nor z.
[a-z] a dash (-) between two characters within a character class ([]) denotes the range of characters between them. e.g., [a-zA-Z] matches all lowercase and uppercase letters from a to z.
a{n} specifies an exact number, n, of the preceding character. e.g., x{3} matches exactly three x’s.
a{n,} specifies n or more of the preceding character. e.g., x{3,} matches three or more x’s.
a{n,m} specifies a range of numbers, between n and m, of the preceding character. e.g., x{3,7} matches three, four, five, six, or seven x’s.
() used to group characters together, thereby considering them as a single unit. e.g., (perishable)?press will match press, with or without the perishable prefix.
^ denotes the beginning of a regex (regex = regular expression) test string. i.e., begin argument with the proceeding character.
$ denotes the end of a regex (regex = regular expression) test string. i.e., end argument with the previous character.
? declares as optional the preceding character. e.g., monzas? will match monza or monzas, while mon(za)? will match either mon or monza. i.e., x? matches zero or one of x.
! declares negation. e.g., “!string” matches everything except “string”.
. a dot (or period) indicates any single arbitrary character.
- instructs “not to” rewrite the URL, as in “...domain.com.* - [F]”.
+ matches one or more of the preceding character. e.g., G+ matches one or more G’s, while "+" will match one or more characters of any kind.
* matches zero or more of the preceding character. e.g., use “.*” as a wildcard.
| declares a logical “or” operator. for example, (x|y) matches x or y.
\ escapes special characters ( ^ $ ! . * | ). e.g., use “\.” to indicate/escape a literal dot.
\. indicates a literal dot (escaped).
/* zero or more slashes.
.* zero or more arbitrary characters.
^$ defines an empty string.
^.*$ the standard pattern for matching everything.
[^/.] defines one character that is neither a slash nor a dot.
[^/.]+ defines any number of characters which contains neither slash nor dot.
http:// this is a literal statement — in this case, the literal character string, “http://”.
^domain.* defines a string that begins with the term “domain”, which then may be proceeded by any number of any characters.
^domain\.com$ defines the exact string “domain.com”.
-d tests if string is an existing directory
-f tests if string is an existing file
-s tests if file in test string has a non-zero value
Pozostałe reguły działają ale jeśli ktoś chce może je też sobie rozpisać, myślę że trudno się oprzeć takiej pokusie.https://www.siepomaga.pl/milosz-mosko - [solved] , Tomasz 31/07/11 20:45
Reguła, która działa
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /(.*)\.[^.][0-9]+\.(css|js).*\ HTTP/ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ %2.%3 [NC,L]
Rozwiązane dzięki informacją zawartym na stronie http://www.askapache.com/...ing-updated-files.html
BTW jedno z lepszych źródeł informacji jakie do tej pory widziałem, potwierdziło się moje podejrzenia że lepiej nie stosować style.css?foo=barhttps://www.siepomaga.pl/milosz-mosko |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|