2016-06-29 12 views
1

Ich baue eine Website über CodeIgniter. Um URIs aussehen hübschere CI mod_rewrite Regel verwendetDas Setzen von Cookies über mod_rewrite schlägt fehl

RewriteCond $1 !^(index\.php|img|css|js|fonts|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [NC] 

Nun möchte Ich mag Menschen zu ermöglichen, Seiten in einer bestimmten Sprache zu verlangen, das heißt Prozess sowohl normale https://example.com/home und sprachspezifische https://example.com/spa/home. In diesem Stadium ist es ziemlich beunruhigend für mich, neue Controller zu erstellen, also möchte ich einen Sprachcookie setzen und den ursprünglichen URI neu schreiben. Nach ein paar gute Artikel zu mod_rewrite Lesen kam ich aber mit diesem

RewriteCond %{QUERY_STRING} ^(eng|spa|ger|fre)/(.*) [NC] 
RewriteRule ^(.*)$ %2 [R,NC,QSA,CO=lang:%1:.example.com:1440:/] 
RewriteCond $1 !^(index\.php|img|css|js|fonts|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [NC] 

up, wenn ich versuche, https://example.com/spa/home den Zugriff auf die URI neu zu schreiben nicht, lang Cookie nicht gesetzt ist, und 404 Seite nicht gefunden Fehler zurückgegeben.

Meine Vermutung ist, dass meine Regel und die ursprüngliche CodeIgniter Regel widersprüchlich sind. Sind sie? Und ist es mein einziger Fehler?

Vielen Dank!

UPD: Apache/2.4.10

Antwort

1

diese übereinstimmen müssen versuchen:

RewriteCond %{REQUEST_URI} ^/(eng|spa|ger|fre)/(.*) [NC] 
RewriteRule ^(eng|spa|ger|fre)/(.*)$ /$2 [R,NC,QSA,CO=lang:%1:ubtv.local:1440:/] 
+0

Es funktioniert auch nicht. Wahrscheinlich sollte ich die ursprüngliche CI Rewrite-Regel neu erstellen, aber ich kann es jetzt nicht berühren, weil Benutzer möglicherweise n nicht in der Lage sein, auf die Website zuzugreifen. Ich denke, ich werde nur CI auf einem Dev-Server einrichten und versuchen, mit diesen beiden Regeln herumzuspielen. Danke trotzdem :) – peyeruni

+0

Wie wäre es mit de "L" Flagge? Ich habe den Test mit einer Drupal-Installation gemacht und es funktioniert nicht ohne "letzte" Regel zu sein: 'RewriteRule^(ger | spa | ger | fre)/(. *) $/$ 2 [R, L, NC, QSA, CO = lang:% 1: ubtv.local: 1440: /] '. Überprüfen Sie auch, ob Sie vor den Regeln, die Sie aktiviert haben, mit "RewriteEngine on" umschreiben können. Und eine gute Sache wäre, dass Sie Ihren vollständigen ** .htaccess ** oder Regelsatz posten. – r3npi2

+0

Ich war mir 100% sicher, dass das Hinzufügen des L-Flags die Hauptregeln für das CI-Rewrite ungültig machen würde, also bereitete ich gerade vor, meinen .htaccess zu posten. Aber das war es nicht! Ich weiß nicht, was passiert ist, aber ich weiß, ich schulde dir sehr viel :) – peyeruni

1

/spa/home ist ein uri seine kein querystring, so dass Sie gegen die %{REQUEST_URI} Variable wie folgt

RewriteCond %{REQUEST_URI} ^/(eng|spa|ger|fre)/(.*) [NC] 
RewriteRule ^(.*)$ /%2 [R,NC,QSA,CO=lang:%1:.example.com:1440:/] 
+0

Funktioniert nicht :( – peyeruni

Verwandte Themen