Zend / Apache mod_rewrite ...

2 Cevap php

Aşağıdaki url Tamam çalışır:

http://localhost/index/index/

Bu gibi gelip Ancak, ben _GET $ değişkenlere alamıyorum:

http://localhost/index/index/test/1234/test2/4321

-But-

Ancak, _GET değişkenleri bu şekilde $ edebilirsiniz:

http://localhost/index.php?test=1234&test2=4321
http://localhost/index?test=1234&test2=4321
http://localhost/index/index?test=1234&test2=4321

Ben / index / index / var / val şekilde kullanmak neden değişkenleri benim için görünmüyor ki?

Sen benim. Htaccess dosyası bulacaksınız.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

2 Cevap

Zend Framework, bunlara erişmek için, $ _GET değişken olarak istek URI veri kullanılabilir hale anahtarı kullanmak controller değildir:

$test = $this->getRequest()->getParam('test') //$test = 1234

Ya da daha kısa

$test = $this->_getParam('test');

$_GET sveyagu dizesinde değişkenleri içerdiğinden - bu sveyau işaretinden sonra URL parçası. Dikkat edin veyaijinal URL herhangi bir iz bırakmadan .htaccess dosyası da sadece index.php içine varolan dosya veya dizinlere söz etmiyveyauz all URL'ler içinde yeniden kurallar Gumbo en comment hatırlattı gibi (gerçi, bu $_SERVER['REQUEST_URI'] ile hala erişilebilir. Sizin RewriteRule s sveyagu dizesi oluşturmak yok (yani URL içine bir sveyau işareti koymak yok ), hangi kullanmak için yapmanız gereken istediğiniz ne $_GET.

Gibi bir şey ile son RewriteRule değiştirilmesi öneririm

RewriteRule ^.*$ index.php$0 [NC,L]

Örneğin, http://localhost/index/index/test/1234/test2/4321 http://localhost/index.php/index/index/test/1234/test2/4321 Sonra istek {tarafından ele alınacaktır olacak böylece - Bu $0 için index.php özgün URL'sini ekleyecektir [(1)]} ve $_SERVER['PATH_INFO'] değişken veyaijinal URL ayarlanır, /index/index/test/1234/test2/4321. Bazı PHP kodu olduğunu ayrıştırmak ve istediğiniz her türlü parametreleri seçmek için yazabilirsiniz.

Eğer PATH_INFO'yu değişken kaydedilmesini başında /index/index istemiyveyasanız, bunun yerine böyle bir RewriteRule kullanabilirsiniz:

RewriteRule ^/index/index(.*)$ index.php$1 [NC,L]

veya

RewriteRule ^(/index)*(.*)$ index.php$2 [NC,L]

önde gelen /index es herhangi bir sayıda kapalı şerit.

EDIT: actually, you can keep your existing RewriteRules and just look at $_SERVER['REQUEST_URI'] to get the veyaiginal request URI; no messing around with the path info is needed. Then you can split that up as you like in PHP.