2012-05-11 70 views
0

我想用apache(mod rewrite)做以下事情。apache mod用the_request重寫

  1. 如果用戶請求http://hostname.tld/index.php/folder/subfolder我希望它重定向(與R = 301)http://hostname.tld/folder/subfolder

  2. 如果用戶請求http://hostname.tld/folder/subfolder該請求應該內部重寫到index.php /文件夾/子文件夾。

爲防止無盡的重定向,第一條規則應檢查%{THE_REQUEST}。這裏的問題是,我無法附加「文件夾/子文件夾」與正則表達式。我應該怎麼做?

對於第二個規則,我有這個(似乎工作)。

RewriteCond %{HTTP_HOST} hostname.tld [NC] 
RewriteRule ^(.*)$ index.php [QSA,L] 

第一個問題仍然存在。

我第一個想到的應該是類似

RewriteCond %{THE_REQUEST} (.*)index.php(.*) [NC] 
RewriteRule /index.php/$ http://hostname.tld/$1 [R=301,QSA,L] 

但是,這是不是真的了。

回答

0

第一個應該是。

RewriteCond %{HTTP_HOST} ^hostname\.tld$ [NC] 
RewriteCond %{THE_REQUEST} index\.php [NC] 
RewriteRule ^index.php/(.*)$ http://hostname.tld/$1 [R=301,L] 

我也看到你的第二個規則重定向到http://hostname.tld/folder/subfolderhttp://hostname.tld/index.php(不http://hostname.tld/index.php/folder/subfolder)。但只要它能夠工作就沒有問題,因爲它也可以防止重定向循環。 但是,以防萬一,這裏是添加文件夾/子文件夾部分的解決方案:

RewriteCond %{HTTP_HOST} ^hostname\.tld$ [NC] 
RewriteCond $1 !^index\.php 
RewriteRule ^(.*)$ index.php/$1 [QSA,L]