我使用MVC與/ <模塊>/<控制器>/<動作命名模塊> /必須在example.com/module/whatever一個模塊,我需要「重新命名'它爲example.com/module-a/whatever。整個應用程序已經寫好了,所以我不能在我的代碼中進行更改,所以我希望能夠使用mod_rewrite來完成。我試過以下如何在URL與mod_rewrite的
RewriteCond %{THE_REQUEST} ^GET\ /module/
RewriteRule ^module/(.*) /module-a/$1 [L,R=301]
它做了什麼,我想盡可能重定向所有URL像example.com/module/whatever到example.com/module-a/whatever,但現在我需要的所有請求'module-a'被內部改寫爲'module'。它還需要爲模塊根目錄(即不帶結尾斜槓的example.com/module)。這可能嗎?我加
RewriteRule ^module-a/(.*)$ module/$1
直接在上述條件和規則,但在訪問頁面時,還在說模塊「模塊,一個」沒有找到之下。
編輯:
我有低於幾個規則,我不認爲他們會影響到這一點,但在這裏,他們無論如何是:
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
解決方案
我結束了使用
RewriteCond %{THE_REQUEST} ^GET\ /module/
RewriteRule ^module$ /module-a [L,R=301]
RewriteRule ^module/(.*) /module-a/$1 [L,R=301]
將所有鏈接從模塊重定向到模塊-a。我必須用2條規則來做,因爲我不知道正則表達式是否足以將它們結合起來,從而處理url example.com/module的特例。
要在內部改寫,原來的規則,我不得不通常會工作,但Zend公司似乎做一些東西,將覆蓋,所以我有途徑來處理它。見rename a zend module with routes
的的RewriteCond使得只有當原來的請求是對/模塊的應用,所以它沒有做任何的循環。並且代替代碼中的每個事件都不是一種選擇。我想我確實希望第一條規則中的[L],因爲我希望它爲第二條規則提出新的申請。搜索引擎並不是我的特例。 – rwilson04