.htaccess rewrite

Status
Niet open voor verdere reacties.

AjaciedNick

Gebruiker
Lid geworden
4 nov 2012
Berichten
129
Ik ben wat in elkaar aan het knutselen, maar krijg behoorlijk lelijke links. Deze kun je omzetten in de .htaccess met modrewrite maar het lukt me niet helemaal.

de link nu is:
site.nl/index.php?p=formule/uitleg&naam=AANG.DUUR

ik wil daar van:
site.nl/formule/uitleg/AANG.DUUR

hoe krijg ik dit goed voor elkaar?
 
Ik heb dit voor redirect naar https://:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]


verder kom ik niet
 
Wat heb je al geprobeerd? Want nu heb je alleen maar een rewrite naar http-> https.....
 
Laatst bewerkt:
Dit mag niet op deze manier. In een waarde van een GET parameters mag je geen gereserveerde tekens zetten. Dit zijn ; / ? : @ = &
In jouw parameter waarde komt een / voor. Het moet worden p=formule%2Fuitleg

Concept
Code:
/formule    $1
/uitleg     $2
/AANG.DUUR  $3

index.php?p=$1%2F$2&naam=$3
 
Laatst bewerkt:
Ik snap er niet veel meer van. Via voorbeelden op google te vinden ben ik uitgekomen bij dit

Code:
RewriteEngine On
RewriteBase / 

RewriteCond %{QUERY_STRING} (^|&)p=formule/uitleg($|&)
RewriteCond %{QUERY_STRING} (^|&)naam=AANTAL\.ALS($|&)
RewriteRule ^index\.php$ https://%{HTTP_HOST}%{REQUEST_URI}/formule/uitleg/AANTAL.ALS

echter word dan dit de url /index.php/formule/uitleg/AANTAL.ALS?p=formule/uitleg&naam=AANTAL.ALS
dat is niet echt de bedoeling.
 
Als ik jouw voorbeeld volg, kom ik op dit uit.

Code:
RewriteEngine On
RewriteBase /

RewriteRule ^/(.*)/(.*)/(.*)/$ index.php?p=$1&2naam=$3
RewriteRule ^/(.*)/$ index.php?p=$1

Maar dit werkt niet.
 
Wat doet die 2?
 
*** Voorbeeld

Stel dat index.php in subfolder 'abc' staat en je hebt het volgende linkje
<a href="https://www.example.nl/abc/formule/uitleg/aang.duur">LINKJE</a>
Code:
[B]*** .htaccess ***[/B]

RewriteEngine on
# gebruik / als index.php in root of /SUB als index.php in subfolder
RewriteBase /abc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]

[B]*** index.php ***[/B]

$page = '';
$name = '';
if (!empty($_GET) && ($_SERVER['REQUEST_METHOD']=='GET')) {
  $arr = explode('/', $_GET['page']);
  if (count($arr) >= 3) {
    $page = rawurldecode($arr[0].'/'.$arr[1]);
    $name = rawurldecode($arr[2]);
  }
}
echo '<br>Page: ', $page;
echo '<br>Name: ', $name;
Noot: in jouw voorbeeld staat alles niet in subfolder /abc/ dus gebruik je in jouw geval RewriteBase /

In .htaccess om naar https te gaan
Code:
# RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Tip: gebruik in map- en bestandsnamen alleen letters, cijfers, '-' (minus) en '_' (underscore). Hiermee voorkom je debugwerk.

Suc6. Have fun.
 
Laatst bewerkt:
*** Voorbeeld

Stel dat index.php in subfolder 'abc' staat
<a href="https://www.example.nl/abc/formule/uitleg/aang.duur">LINKJE</a>
Code:
*** .htaccess (RewriteBase is folder waar index.php is)

RewriteEngine on
# gebruik / in root of /SUB in subfolder
RewriteBase /abc
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]

*** php (hier de oplossing van je vraag)

if (!empty($_GET) && ($_SERVER['REQUEST_METHOD']=='GET')) {
  $arr = explode('/', $_GET['page']);
  if (count($arr) >= 3) {
    echo '<br>Page: ', $arr[0], '/', $arr[1];
    echo '<br>Name: ', $arr[2];
  }
}

In .htacces om naar https te gaan
Code:
# RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Suc6. Have fun.

Kan dit niet zonder php gedeelte? alleen dit .htaccess gedeelte werkt in iedergevel niet
 
Zoals bron aangaf hierboven.

$1 voor /formules
&2 voor /uitleg (.php want komt uit parameter p=, pagina systeem)
Waarom &2?? Een variabele heeft hier ook een $.

Je kan ook Multiviews gebruiken, en het met PHP afhandelen, maar dat raad ik af. Of je moet alles naar je index.php rewriten, en daar alles met PHP afhandelen. Dan ben je zeer flexibel.
 
Laatst bewerkt:
zonder die &2 doet hij ook niks.

heb nu:
Code:
RewriteEngine On
RewriteBase /

RewriteRule ^/(.*)/(.*)/(.*)/$ index.php?p=$1naam=$3
RewriteRule ^/(.*)/$ index.php?p=$1
 
Ja zo komen er meer pagina's bij. Maar voor deze ene pagina werkt het al niet.
want ik hoef dan toch niks in de index.php te zetten?
 
Tuurlijk wel. In je index.php handel je alle verzoeken af.

$path is dan een array met alles wat je tussen de slashes in je URL zet.
 
Laatst bewerkt:
in mijn index.php heb ik de code uit jouw voorbeeld gezet, maar hij doet niks.

Code:
<?php
// Read REQUEST_URI, suppress errors (gave E_WARNING prior to PHP 5.3.3).
$uriData = @parse_url($_SERVER['REQUEST_URI']);

$path = '';
if ($uriData === false) {
    // Do something?
} else {
    if (isset($uriData['path'])) {
        // We might be in a subdirectory of the webroot.
        // We are only interested in the part starting from this relative root.
        $path = str_replace(DIRECTORY_SEPARATOR, '/', $uriData['path']);
        $relativePath = str_replace(DIRECTORY_SEPARATOR, '/', dirname($_SERVER['SCRIPT_NAME']));
        // Strip the relative path from $path.
        $path = substr($path, strlen($relativePath));
        // Finally, strip any leading/trailing slashes so we end up with a "cleaned" path.
        $path = trim($path, '/');
    }
}
?>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan