Ben yerine eski bir Homegrown çerçeve CakePHP kullanmak için sitemde güncelleme üzereyim. Ben yeni CakePHP SEO dostu URL'ler için eski PHP parametre URL'ler yönlendirmek htaccess dosyası yazmak gerekiyor, ama ben o iş için alınamıyor.
Benim htacess dosyası (app / webroot bir) şu anda bu gibi görünüyor:
RewriteEngine On
RewriteRule ^index.php?action=view&item=172$ index.php?url=item/172 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
Bu çalışmıyor. Ben L kaldırılması ve sadece item/172 yönlendirmek zorunda çalıştı, ama bu da işe yaramadı. Geçerli bir URL parametresi unset ile rüzgarlar, ve ben $ _SERVER ['REQUEST_URI'] bakarsanız o değişmez. Mod_rewrite değiştirmek olsaydı ben bilmiyorum ama. Benim yazma kuralı, doğrudan benim tarayıcınızın URL çubuğuna kopyalanmış olsa bile, aktive edilecek görünmüyor. Ben önde gelen /
dışarı dışarı ile çalıştı. Hiçbir zar.
Burada neler oluyor?
Ve nasıl dönüştürme yapmak için bir daha genelleme URL yazabilirsiniz? Ben böyle bir şey denedim:
RewriteRule ^index.php?action=view&item=([0-9]+)$ index.php?url=items/$1 [R=301,L]
Ama bu da işe yaramadı. Ben yanlış ne yapıyorum?
EDIT Bu olumlu Kudurttun.
RewriteRule ^(.*)$ /index.php?url=item/172 [R=301]
Bu çalışıyor. O doğru oluşturulmuş Kek url içine TÜM adresler kaçmaktadır. Hangi kekinin işlemcisi sonra alır ve bir şekilde yönetir. Ben Cake ikinci yazma kuralı özlüyor nasıl emin değilim, ama öyle. Bu çalışıyor:
RewriteRule ^(.*)$ item/172 [R=301]
Önceki son belirterek yaptığı gibi, bozuk bir yönlendirme döndürür:
RewriteRule ^(.*)$ /index.php?url=item/172 [R=301,L]
Yani tamamlamak asla olduğunu beyan eder.
Yani aslında daha doğrusu neden bu biri olarak şaşırmış:
RewriteRule ^(.*)$ /index.php?url=item/172 [R=301]
Returns the correct Cake url, but it does and it gets sent to the correct page. However, as soon as I attempt to change the first part, it starts failing.
Bir saniye bekle. O ?
bu başarısız başlar çarptığında bulunuyor. Bu başarıyla index.php
maçları değil index.php?
Ama o kaçan hiç fark etmez.
RewriteRule ^index.php\?$ /index.php?url=item/172 [R=301]
Bu doğru URL'yi maç ya dönmek için başarısız olur. $_GET['url']
boş olduğundan ve bütün ya Cake normal yakalamak maç görünmüyor. Nasıl mod_rewrite'ı anlamıyla maç parametre karakterler kaçış?