我想用apache(mod重写)执行以下操作。
如果用户请求http://hostname.tld/index.php/folder/subfolder,我希望将其重定向(使用R = 301)到http://hostname.tld/folder/subfolder。
如果用户请求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]
但事实并非如此。
答案 0 :(得分: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/subfolder
重定向到http://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]