我即將更新我的網站以使用CakePHP而不是舊的本地框架。我需要編寫HTAccess文件以將舊的PHP參數URL重定向到新的CakePHP SEO友好的URL,但我無法使其工作。重定向/ .htaccess將舊的PHP參數URL更改爲適合SEO的CakePHP URL?
我htacess文件(一個在app/webroot的)看起來像這樣的時刻:
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]
它不工作。我嘗試刪除L並將它重定向到項目/ 172,但這也不起作用。當前版本的URL參數未設置,如果我查看$ _SERVER ['REQUEST_URI'],它不會改變。雖然我不知道mod_rewrite是否會改變這一點。我的重寫規則似乎沒有被激活,即使直接從我的瀏覽器的URL欄複製。我試了一下,並拿出領先的/
。沒有骰子。
這是怎麼回事?
我該如何寫一個更一般化的URL來完成轉換?我試過類似的東西:
RewriteRule ^index.php?action=view&item=([0-9]+)$ index.php?url=items/$1 [R=301,L]
但是這也沒有效果。我究竟做錯了什麼?
編輯這是積極的真氣。
RewriteRule ^(.*)$ /index.php?url=item/172 [R=301]
這很有效。它會將所有網址導入正確形成的Cake網址。然後哪個蛋糕的處理器啓動並以某種方式處理。我不確定它是如何錯過Cake的第二個重寫規則,但它確實如此。嘗試這樣的:
RewriteRule ^(.*)$ item/172 [R=301]
返回一個畸形的重定向,因爲它最後在前面的一個指定:
RewriteRule ^(.*)$ /index.php?url=item/172 [R=301,L]
即聲明它永遠無法完成。
所以,實際上,我相當困惑,爲什麼這一個:
RewriteRule ^(.*)$ /index.php?url=item/172 [R=301]
返回正確的蛋糕網址,但它和它被髮送到正確的頁面。但是,只要我嘗試更改第一部分,就會啓動失敗。
等一下。當它擊中?
時,它開始失敗。它成功匹配index.php
但不是index.php?
但是,轉義它沒有區別。
RewriteRule ^index.php\?$ /index.php?url=item/172 [R=301]
無法匹配或返回正確的URL。而且它看起來並不符合Cake的正常捕捉,因爲$_GET['url']
是空的。你如何轉義參數字符來匹配mod_rewrite中的字面意思?
GAH! Mod重寫的*&@ $&錯誤是什麼?我有這個工作約30秒,增加了另一個重寫規則,它又停止了工作!我刪除了其他重寫規則,但它仍然不能正常工作!到底怎麼回事?! – 2010-10-24 08:22:52