urlManager erweiterte Parameter

meine Rule


'rules'=>array(

                                'faq'=>'site/page/view/faq',

meine Link


array('label'=>Yii::t('cp','FAQ'), 'url'=>array('site/page', 'view'=>'faq'))

Die erstellte Url


 site/page/view/faq.html 

Gewünscht ist aber nur


 faq.html 

Versuchs mal so:




'rules'=>array(

   'faq'=>array('site/page', 'defaultParams' => array('view' => 'faq')),

),



Okay danke das hat super funktioniert. ^^

Mhh nun habe ich nur noch das problem wenn ich die index.php ausblende das er die Datein dann nicht mehr findet.

die htaccess habe ich so wie im Tutorial beschrieben angepasst aber nichts.

Meine Komplete Rule


'urlManager'=>array(

			'urlFormat'=>'path',

                        // add bye jb@xxxxxx.net 01.03.2011

                        'showScriptName'=>false,

                        'urlSuffix'=>'.html',

                        // end add 

			'rules'=>array(

                                'faq'=>array('site/page', 'defaultParams' => array('view' => 'faq')),

				'index' => 'site/index',

                                'products' => 'site/products',

                                'creat' => 'site/create',

                                'contact' => 'site/contact',

                                'konto' => 'site/konto',

                                'view' => 'webmaster/view',

			),

Erstellung der Links


$this->widget('zii.widgets.CMenu',array(

                                                'items'=>array(

                                                        array('label'=>Yii::t('cp','Startseite'), 'url'=>array('site/index')),

                                                        array('label'=>Yii::t('cp','Produkte'), 'url'=>array('site/products')),

                                                        array('label'=>Yii::t('cp','Registrieren'), 'url'=>array('site/create' ),'visible'=>Yii::app()->user->isGuest),

                                                        array('label'=>Yii::t('cp','FAQ'), 'url'=>array('site/page', 'view'=>'faq')),

                                                        array('label'=>Yii::t('cp','Kontakt'), 'url'=>array('site/contact')),

                                                        array('label'=>Yii::t('cp','Konto'), 'url'=>array('site/konto'), 'visible'=>!Yii::app()->user->isGuest)

                                                )

                                        )); ?>

Was für eine Fehlermeldung bekommst du denn? 404 vom Apache oder eine Fehlermeldung von Yii?

Kannst du die .htaccess bitte noch posten?

Ist der 404 von Apache

.htaccess




RewriteEngine on


# Verwende Verzeichnis oder Datei, wenn sie vorhanden sind

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d


# Leite andernfalls auf index.php um

RewriteRule . index.php



Sollte eigentlich funktionieren. Die .htaccess liegt im selben Verzeichnis wie die index.php?

@Y!!:

Ich glaube, deine vorgeschlagene Lösung funktioniert nicht mehr richtig, sobald mehrere statische Seiten verwendet werden. Soweit ich mich erinnere ignoriert Yii die defaultParams nämlich beim bauen einer URL. Du erhältst damit immer die selbe URL, auch für unterschiedliche Werte von ‘view’.

Ich würd das daher eher mit einer "catch-all" Rule am Ende der rules so lösen:




'<view>' => 'site/page',



oder auch so, um die erlaubten views einzuschränken:




'<view:(faq|sonstwas|blabla)>' => 'site/page',



@ Y!! Ja die .htacces liegt auf dem Server im verzeichnis wo auch die index.php ist

Und @Mike danke ich habe das gleich mal hinzugefügt funktionert prima

Nein Mike das wurde zum Glück schon lange geändert: http://code.google.com/p/yii/source/detail?r=2174

Ich habs grad extra nochmal getestet:




'test1' => array('site/test', 'defaultParams' => array('view' => 'test1')),

'test2' => array('site/test', 'defaultParams' => array('view' => 'test2')),




die($this->createUrl('site/test', array('view' => 'test1')));


die($this->createUrl('site/test', array('view' => 'test2')));

Hmm, ok, danke für den Hinweis. Hätte zwar gedacht, ich hatte das kürzlich erst bei nem Projekt, könnte aber auch mit ner älteren Yii-Version gewesen sein.

Füge das hier mal am Ende der Apache config ein:

Dann Apache neustarten, auf deine Yii app zugreifen so das wieder ein 404 kommt und dann gucken was in rewrite.log steht. Vielleicht hilft uns das irgendwie weiter.


[Tue Mar 08 13:10:08 2011] [error] [client xxxxx] File does not exist: /var/www/xxxxx/products.html, referer: http://xxxxxname/xxxxxx/index.php/index.html



Aber das ist aus der access.log/error.log, nicht aus der rewrite.log?

Ja ist aus dem error.log ich kann RewriteLogLevel 3 beim Apache nicht setzten

wenn ich restart mache fail


root@xxxxxxx:~# /xxxx/xxx/xx restart

Syntax error on line 5 of /xxxx/xxxxx/sites-enabled/000-default:

Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration

Action 'configtest' failed.

The Apache error log may have more information.

 failed!



Hmm

Vielleicht ist mod_rewrite ja garnicht aktiviert?? Normalerweise würdest du dann aber einen 500er Fehler bekommen sobald auf die .htaccess zugegriffen wird da die ja mod_rewrite spezifische config Variablen enthält.

Kannst du mal die Haupt-config raussuchen? Das müsste apache2.conf oder httpd.conf sein unter linux.

Jedenfalls müsste da sowas drinstehen wie:


LoadModule rewrite_module modules/mod_rewrite.so

Vermutlich fehlt das in der Apache conf:


RewriteEngine On

Zum Zeitpunkt wo deine Logging-Direktiven gelesen werden, ist die .htaccess noch nicht verarbeitet.

Mhh ist woll leider nicht möglich müsste sonst denn Apache neuinstallieren.

Weil auf Debian server drauf ist

Hallo,

Zwar schon älter der Thread.

Aber versuch es doch mal mit diesem Code.

Oben hat man gesehen das er zur index.html "rewriten" hat.

Und DirectoryIndex sollte vl das Problem beheben.


<IfModule mod_rewrite.c>

Options +FollowSymLinks

IndexIgnore */*

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . index.php


</IfModule>

DirectoryIndex index.php

Ansonsten, weiß gerade nicht ob schon gefragt. Aber ist in der Apache Config auch das mod_rewrite Module aktiviert ?


mfg Excid

PS: Und noch ne andere Idee hab ich da so spontan ^^. Trag in der Index.php in die oberste Zeile direkt nach dem <?php


echo "test";

ein. Und öffne http://host/faq.html wenn jetzt wieder nen 404 kommt, geht definitiv Mod_Rewrite nicht. Wenn "Test" kommt, kannst dir sicher sein, das Yii den Url nicht versteht.

Ja das problem hatten wir soweit schon gelößt und da war im Endeffeckt was mit dem Modul Mod_rewrite