Support » Allmänna frågor » Egna rewrite rules direkt i .htaccess

Visar 1 svar - 1 till 15 (av 15 totalt)
  • Moderator Tor-Bjorn Fjellner

    (@tobifjellner)

    WordPress-hemmapulare, Projektledare, Författare, Översättare och Vänlig Själ

    1. När du lägger in kod bör du markera den och märka den med hjälp av knappen ”code” för att den inte ska strula till visningen av forumet. Just i detta fall var det ingen fara, men det är bra att alltid göra detta för tydlighets och säkerhets skull.
    2. Denna fråga berör egentligen inte WordPress. Om den är konfigurerad för detta (vilket den brukar vara på de flesta vanliga webbhotell) kör webbservern Apache kommandona i .htaccess innan WordPress ens laddas in.
    3. Jag är inte säker på att jag förstod din fråga riktigt. Vad är det du vill åstadkomma?

    Den här raden i .htaccess utför följande:
    Om webbservern tar emot ett http-anrop där URL:en efter servernamnet har formen: ”serietabell/(nånting1)/nånting2/ så kommer webbservern att svara att webbläsaren i stället ska fråga efter index.php?page_id=75&league=nånting1&season=nånting2
    Flaggorna på slutet betyder:
    L = Last, d.v.s. sluta köra kommandon i resten av .htaccess
    R = Redirect, d.v.s. i stället för att bara hämta den begärda sidan under denna anpassade adress ska webbservern skicka tillbaka den ”maskinkorrekta” adressen till webbläsaren, så att webbläsaren själv begär in sidan.
    Det är alltså flaggan R som gör att URL:en i adressraden ändras. Dessutom tar det längre tid att ladda in sidan, eftersom webbläsaren hela tiden måste ”gå ett varv extra”.
    Om du tar bort flaggan R kommer den snyggare URL:en att stå kvar i webbläsaren (och servern kommer att skicka rätt sida i stället för ett omdirigeringskommando).
    Flaggan L kan du låta stå kvar om sidan laddas in korrekt (vilket jag tror att den kommer att göras). Om du tar bort flaggan L kommer även senare kommandon i .htaccess att tolkas, vilket kan ta någon millisekund extra.

    Det misstänkte jag men tar jag bort [R] så får jag istället resultatet http://se.aktuellspeedway.eu/serietabell/ då försvinner alltså min egna del helt.

    Tror att mina regler i själva verket inte är några större fel på. Felet ligger i att WP vill omvandla ?page_id=75 efter sina regler och då kör över mina. Ändrar jag tex idt till 89 får jag resultatet http://se.aktuellspeedway.eu/forare/.

    Det jag på något viss måste göra är att förhindra WP från att köra sina regler på dem sidorna jag vill komma åt.

    Sätter jag upp mina regler i functions.php med WP kommandon funkar det utmärkt, men problemet är att jag måste köra olika regler för olika webbsidor (Multi Site) och verkar inte gå att genomföra med WP kommandon.

    Greppar lite efter sista halmstrå för att slippa köra 13 olika installationer för egentligen samma sida.

    Moderator Tor-Bjorn Fjellner

    (@tobifjellner)

    WordPress-hemmapulare, Projektledare, Författare, Översättare och Vänlig Själ

    WordPress kör ju sin egna specialare i .htaccess för att styra om allt till /index.php om man inte får direkt träff på verklig katalog och/eller fil.
    Finessen är att WordPress sedan tjuvkikar i en servervariabel för att hitta den ”ursprungligen begärda adressen”.
    Med andra ord skulle du med någon regel i .htaccess vilja ändra denna servervariabel. Jag vet inte om det går.
    Jag ska kolla lite snabbt om jag hittar något. Annars kanske du behöver ställa samma fråga på stackexchange, där man kan hitta riktigt duktigt folk.

    Moderator Tor-Bjorn Fjellner

    (@tobifjellner)

    WordPress-hemmapulare, Projektledare, Författare, Översättare och Vänlig Själ

    Moderator Tor-Bjorn Fjellner

    (@tobifjellner)

    WordPress-hemmapulare, Projektledare, Författare, Översättare och Vänlig Själ

    Eller flytta denna logik till WordPress:
    https://developer.wordpress.org/reference/functions/add_rewrite_rule/

    • Detta svar redigerades 6 månader, 1 vecka sedan av  Tor-Bjorn Fjellner. Anledning: Länken visades konstigt

    Som nämnt måste jag använda olika regler för olika sidor i mitt multi-nätverk och då funkar inte WPs add_rewrite_rule, då det inte finns liknande för rewriteCond..

    Ska studera länken du skickade och se om jag kan förstå något av det 😉

    Moderator Tor-Bjorn Fjellner

    (@tobifjellner)

    WordPress-hemmapulare, Projektledare, Författare, Översättare och Vänlig Själ

    Jag vet inte om man i .htaccess kan norpa saker från redirect och lägga in dem i request uri. Men man skulle ju kunna tänka sig att resultatet av en redirect måste hamna i en variabel, som du då kanske kan kopiera till request URI…

    Berätta gärna hur det går.

    jonassturebrand

    (@jonassturebrand)

    Det finns inget sätt att definiera url för en rewrite rule via add_rewrite_rule() functionen? Mitt prblem bygger sig ju på att jag måste ha olika rewrite rules för olika sidor i multi-site nätverket

    @jonassturebrand Det går utmärkt att ha olika rewrite rules på olika sajter i en multisite. Det enklaste sättet att uppnå det är att skapa tillägg som registrerar rewrite rules och aktivera tilläggen på de sajter där du vill ha reglerna i fråga.

    Så om du har två uppsättningar regler skapar du alltså två tillägg:
    A – Registrerar första uppsättningen regler med add_rewrite_rule
    B – Registrerar andra uppsättningen regler med add_rewrite_rule
    …osv vid behov.

    jonassturebrand

    (@jonassturebrand)

    Förlåt för att jag är lite okunnig, skapade ett tillägg.

    <?php
    /**
     * @package AS URL svenska
     * @version 1.0
     */
    /*
    Plugin Name: URL svenska
    Plugin URI: http://www.aktuellspeedway.se
    Description: Permalankar.SE
    Author: Jonas Sturebrand
    Version: 1.0
    Author URI: http://www.aktuellspeedway.se
    */
    
    add_rewrite_rule('^serietabell\/([a-zA-Z0-9\-]+)\/([0-9]+)\/?', 'index.php?page_id=75&league=$matches[1]&season=$matches[2]', 'top');
    add_rewrite_rule('^serietabell\/([a-zA-Z0-9\-]+)\/?', 'index.php?page_id=75&league=$matches[1]&season=2018', 'top');
    
    add_rewrite_rule('^kalender-resultat\/([a-zA-Z0-9\-]+)\/([0-9]+)\/?', 'index.php?page_id=78&league=$matches[1]&season=$matches[2]', 'top');
    add_rewrite_rule('^kalender-resultat\/([a-zA-Z0-9\-]+)\/?', 'index.php?page_id=78&league=$matches[1]&season=2018', 'top');
    
    add_rewrite_rule('^statistik\/([a-zA-Z0-9\-]+)\/([0-9]+)\/?', 'index.php?page_id=80&league=$matches[1]&season=$matches[2]', 'top');
    add_rewrite_rule('^statistik\/([a-zA-Z0-9\-]+)\/?', 'index.php?page_id=80&league=$matches[1]&season=2018', 'top');
    
    add_rewrite_rule('^publik\/([a-zA-Z0-9\-]+)\/([0-9]+)\/?', 'index.php?page_id=82&league=$matches[1]&season=$matches[2]', 'top');
    add_rewrite_rule('^publik\/([a-zA-Z0-9\-]+)\/?', 'index.php?page_id=82&league=$matches[1]&season=2018', 'top');
    
    ?>
    

    Då får jag felmeddelande Fatal error: Call to a member function add_rule() on null in /home/u/u5486966/www/aktuellspeedway.eu/wp-includes/rewrite.php on line 140

    @jonassturebrand

    Misstänker att koden körs för tidigt, testa att lägga den på init-hooken istället så att den körs lite senare under sidladdningen, såhär:

    add_action('init', function() {
     // Din kod här
    });

    Ytterligare ett tips är det utmärkta tillägget Rewrite Rules Inspector där du kan se alla dina regler och även testa godtyckliga URL:er mot dina regler för att säkerställa att saker fungerar som du tänkt:
    https://wordpress.org/plugins/rewrite-rules-inspector/

    jonassturebrand

    (@jonassturebrand)

    Fasen så gut, äntligen en lösning och mycket enklare än vad man kunde ana. Stort tack…

    Funkar fint, men får dock detta meddelande

    Tillägget genererade 2 tecken av oväntad utdata (unexpected output) under aktiveringen. Om du noterar ett felmeddelande av typen ”headers already sent” , problem med flöden eller andra fel, försök att inaktivera eller radera detta tillägg.

    bör jag oroa mig?

    Kul att det funkar!

    Felmeddelandet du ser kan orsaka problem i vissa fall. Dubbelkolla att du inte har något whitespace (mellanslag, tabbar) runt dina PHP-taggar i början och slutet av filen.

    Ett sätt att underlätta för dig själv är att inte göra någon sluttagg ?>, det krävs nämligen inte av PHP och man minskar risken för problem med whitespace som kan riskera att skrivas ut.

    jonassturebrand

    (@jonassturebrand)

    Det hjälpte!

    Stort tack!

Visar 1 svar - 1 till 15 (av 15 totalt)
  • Ämnet ”Egna rewrite rules direkt i .htaccess” är stängt för nya svar.