2010-09-28 46 views
1

我將我的網站移動到不同的服務器,因爲那時我的所有網址開始顯示404錯誤。需要一個國防部重寫正則表達式解決方案.htaccess

早些時候我的所有網址都像這樣mysite.com/title-of-url

但現在所有此類URL越​​來越404錯誤,所以在現場管理我禁用搜索引擎友好的URL特徵,現在我可以訪問相同的在 mysite.com/index.php/title-of-url頁

我累了創建一些正則表達式的.htaccess做的目的一樣 的RewriteRule ^([^ /] +)/ $ /指數。 php/$ 1 [L]

但它的工作很好「/」的一個深度,我的意思是它的工作爲mysite.com/first但不適用於mysite.com/first/second

我正在尋找REGEX幫助,以便 mysite.com/first/second應該被重寫爲mysite.com/index.php/first/second以及mysite.com/something被重寫爲mysite。 COM /的index.php /東西..

期待着您的熱心幫助 感謝

回答

1

當然它不與更多/工作。您的規則說:

  • 比賽從開始:^
  • (啓動$1分組:(
  • 比賽以外的所有斜線:[^/]+
  • (完分組:)
  • 匹配可選引導斜槓/?
  • 匹配到結尾$

如果你真的想匹配的一切,用一個點,而不是一個字符類,匹配除了/一切:

RewriteRule ^(.+?)/?$ /index.php/$1 [L] 

不要忘記,包括前一個RewriteCond排除現有的文件和目錄,以避免無限遞歸。無法做到這一點,最終會出現500內部服務器錯誤。完整的代碼:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+?)/?$ /index.php/$1 [L] 
+0

感謝您的輸入Lekensteyn 但我用的RewriteRule ^/$ /index.php/$1 [L] 如你提到,它在500內部服務器結束了(+?)?錯誤:( – vaibhav 2010-09-28 18:02:32

+0

是否有可能爲正則表達式重寫 ^ mysite.com/depth1/depth2以^ mysite.com/index.php/depth1/depth2 以及^ mysite.com/depth1以^ mysite.com/index.php/depth1 in one rewrite rule。 我想如果我們將mysite.com/somethingsomething改寫爲mysite.com/index.php/somethingsomething – vaibhav 2010-09-28 18:15:37

+0

請再提供任何幫助 – vaibhav 2010-09-28 18:17:44