2012-05-11 73 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]