[IIS/Rewrite] RewriteRules voor mod_rewrite dll

Pagina: 1
Acties:
  • 144 views sinds 30-01-2008
  • Reageer

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 18-07 21:21
Beste Tweakers,

Al veelte lang ben ik bezig met het oplossen van een naar mijn idee relatief eenvoudig probleem.
Op http://www.iismods.com/url-rewrite/documentation.htm heb ik een dll gedownload om mijn URL's te herschrijven en het werkt Ok wanneer ik alles met de hand in stel en naar het juiste bestand verwijs. Helaas is de site veel te groot om dit voor ieder adres te doen en zoek dus naar een alternatief.

Ik ben bekend met apache mod_rewrite en daar zitten meer functies in welke het allemaal gemakkelijker maken maar helaas is apache geen optie.

Volgens de documentatie zou dit moet werken
code:
1
2
3
4
Debug 0 
Reload 50000
RewriteCond HTTP_HOST www.hostname.(be|nl|eu)
RewriteRule ^/(.*) /index.php?$1/


Dit werkt inderdaad en alle adressen hoe diep er ook gelinkt word werken behalve het CSS

Wanneer ik dit gebruik:
code:
1
2
3
4
5
Debug 0 
Reload 50000
RewriteCond HTTP_HOST www.hostname.(be|nl|eu)
RewriteRule ^/css/(.*) /css/$1
RewriteRule ^/(.*) /index.php?$1/

Werkt mijn css prima maar kan ik niet meer dieplinken. Ik heb allerlei mogelijke dingen geprobeerd zelfs met request uri (want die kun je wel weer gebruiken ) maar het is het ene of het andere.

Wie kan mij hierbij helpen?

Erik

  • WormLord
  • Registratie: September 2003
  • Laatst online: 25-07 12:00

WormLord

Devver

Volgens mij werkt een RewriteCond alleen voor de eerstvolgende RewriteRule en dus niet meer voor de daarop volgende Rules. Misschien dat je daardoor problemen hebt met de 2de configuratie. Anders weet ik het ook niet.

  • Gummie
  • Registratie: Maart 2000
  • Laatst online: 29-07 19:14
Stomme vraag maar heb je ook al geprobeerd om de RewriteRules om te draaien.
dus:
code:
1
2
3
4
5
Debug 0 
Reload 50000
RewriteCond HTTP_HOST www.hostname.(be|nl|eu)
RewriteRule ^/(.*) /index.php?$1/
RewriteRule ^/css/(.*) /css/$1


Er hangt mij namelijk iets bij dat je eerst de kortste en daarna de langste moet doen.

[ Voor 16% gewijzigd door Gummie op 19-04-2006 15:13 ]


  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 18-07 21:21
Gummie schreef op woensdag 19 april 2006 @ 15:09:
Stomme vraag maar heb je ook al geprobeerd om de RewriteRules om te draaien.
dus:
code:
1
2
3
4
5
Debug 0 
Reload 50000
RewriteCond HTTP_HOST www.hostname.(be|nl|eu)
RewriteRule ^/(.*) /index.php?$1/
RewriteRule ^/css/(.*) /css/$1


Er hangt mij namelijk iets bij dat je eerst de kortste en daarna de langste moet doen.
Ja ik heb ze al omgedraaid en alle mogelijk andere combinaties, behave de goede dan :)

Ik ben van ellende maar op zoek gegaan naar andere rewriters en kom dan uit op isapirewrite4.dll
deze laatste versie is ook best aardig en lost bovenstaande problemen in ieder geval op

code:
1
2
RewriteCond %{HTTP_HOST} ^www\.domein\.nl$
RewriteRule ^(.*)/(.*)(\.html|/)$        /index.php?$1/$2


Maar wanneer ik dan weer met deze aan de slag ga vervalt mijn REQUEST_URI wanneer ik de eerste regel uncomment. Dus was ik op die verkeerd doe weet ik niet.

Kortom ik ben al blij als een van de twee gaat werken :)
Op http://cheeso.members.winisp.net/examples.aspx heb ik de versie waar ik nu mee bezig ben (en ook het meeste vertrouwen in heb) gevonden. (ergens onderaan kun je alles downloaden inc source)

Erik

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:33

TeeDee

CQB 241

offtopic:
Werk jij al lang met deze isapi? Voor een site heb ik deze ook gebruikt alleen zorgt deze isapi er wel eens voor dat IIS gereset word. Erg vervelend. De support van iisMods lijkt stil te liggen.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 29-07 21:09

Creepy

Tactical Espionage Splatterer

Hmm... hebben we het nu puur over een extra module/dll voor IIS welke het rewriten mogelijk maakt? Want dan move ik je topic even richting SA aangezien het meer over installeren/configureren van IIS gaat dan daadwerkelijk ontwikkelen :)

Move -> SA

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 18-07 21:21
Na nog een gehele tijd er mee bezig te zijn geweest heb ik geprobeerd om de maker van de dll te mailen en dit is zijn antwoord:


------------------------KNIP---------------------------------------------------
I suspect the RewriteCond is working properly, but perhaps your RewriteRule is not functioning the way you would like it to function.

Here's an example rewrite rule for you to try:

RewriteRule ^/(?!index.php)(?!.*\/$)(.*)$ /index.php?$1

What this pattern says is:
^/ for any url that starts with a slash
(?!index.php) and does not next include index.php
(?!.*\/$) and does not end in a slash
(.*)$ then, match the entire URL (without the leading slash)

The rewriter then prepends index.php? to the matched string.

Using this rule, you get these transformations:

'/news/2006-04/newsitem.html' ==> '/index.php?news/2006-04/newsitem.html'
'/news/' ==> No Rewrite (because it ends in a slash) '/news' ==> '/index.php?news'

I don't know if this is what you want. But it is a rule you can start with.

As another example, using this rule:
RewriteRule ^/(?!index.php)(?!.*\/$)(?!.*\.html$)(.*)$ /index.php?$1

...You should get these transformations:
'/news/2006-04/newsitem.html' ==> No Rewrite '/news/' ==> No Rewrite '/news' ==> '/index.php?news'

The only change in this rule is the addition of the negative look-ahead (?!.*\.html$), which says "the pattern must not match a line ending in '.html'". The first URL ends in .html and therefore does not match this pattern. Therefore the first URL is not rewritten.


The rule you have:

RewriteRule ^(.*)/(.*)(\.html|/)$ /index.php?$1/$2

...says, something like:

(.*)/(.*) match any line that includes a slash
(\.html|/) and ends in .html or slash

keep in mind that the * matches zero or more characters. So (.*) can and will match -nothing-. In my tests, your rule gives these results:

'/news/2006-04/newsitem.html' ==> '/index.php?/news/2006-04/newsitem'
'/news/' ==> '/index.php?/news'
'/news' ==> No Rewrite
'/foo/bar/bah/' ==> '/index.php?/foo/bar/bah'
'/foo/bar/bah' ==> No Rewrite


Which I think is not consistent with what you said you want. In fact, this rule is rewriting all the URLs you labeled as "OK" and is not rewriting the URLs you marked as "NOT OK".

So what I am saying is, based on what I understand of your goals, your rule appears to be incorrect. Please note: This is completely independent of the RewriteCond. Also, I may be misunderstanding your goals, because I am not clear what you mean.

-------------------------------KNIP ------------------

Conclusie is dus dat mijn RewriteCond nu klopt maar dat de rewriterule niet juist is, waardoor dat het op regular expressions aankomt.
Ik dacht dat ik met deze regular expression ^(.*)/(.*)(\.html|/)$ de volgende urls kon rewriten
URL Rewrite
/nieuws/2006/04/title.html ===> index.php?/nieuws/2006/04/title

Wat dus niet blijkt te kloppen. Daarbij moest ieder adres onafhankelijk van het aantal slashes eindigen op een / of op .html.

De rewriterules die ik van de maker heb gekregen werken niet en voldoen niet aan wat ik zocht. Dit ga ik nu proberen zelf uit te zoeken hopelijk met wat hulp van jullie.

offtopic
Ik gebruik tot nu toe de rewrite alleen nog maar in de testomgeving en zonder problemen.

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 18-07 21:21
De oplossing:

In de module zat een klein bugje waardoor dat de rewrite niet doorgegeven werd aan de servervariable.Deze is er nu uitgehaald. Download de laatste versie op http://cheeso.members.winisp.net/IIRF.htm

Deze rewriterule moet dan werken
MaxMatchCount 10

code:
1
2
3
RewriteCond %{HTTP_HOST} ^www.hostname.nl$
RewriteRule ^/(?!index.php)(.*\/$)(.*)$     /index.php?/$1
RewriteRule ^/(?!index.php)(.*\.html$)(.*)$     /index.php?/$1


Urls welke dan werken zijn alle urls die eindigen op een / en .html

Bedankt voor jullie hulp maar vooral ook de man achter Ionic's ISAPI Rewrite Filter
Pagina: 1