0

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

  1. 如果用户请求http://hostname.tld/index.php/folder/subfolder我希望它重定向(使用 R=301)到http://hostname.tld/folder/subfolder

  2. 如果用户请求http://hostname.tld/folder/subfolder,则该请求应在内部重写为 index.php/folder/subfolder。

为了防止无休止的重定向,第一条规则应该检查 %{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]

但事实并非如此。

4

1 回答 1

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]
于 2012-05-11T16:17:01.530 回答