使用.htaccess从URL中删除/index.php/

时间:2013-06-27 14:15:49

标签: regex .htaccess

要注意,我在StackOverflow上发现了类似的问题,但它们并没有按照我的需要工作。

我有一个网址,例如:

http://www.example.com/index.php/test

我想删除index.php目录,因此如果输入上述内容,则会转到:

http://www.example.com/test

这似乎有效

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]

但是如果网址是:

http://www.example.com/index.php?option=example

变成

http://www.example.com/?option=example

所以 index.php 只有在它是我的第一个例子中的目录时才会被删除。

如果您输入例如:

http://www.test.example.com/index.php/index.php/dfd

应该去

http://www.test.example.com/dfd

1 个答案:

答案 0 :(得分:1)

以下规则将:

  • 不适用于/index.php?o=a

  • /index.php/index.php/dfd重定向到/dfd

  • /index.php/index.php/dfd?a=b重定向到/dfd?a=b

  • /index.php/index.php?a=b重定向到/index.php?a=b

RewriteCond %{QUERY_STRING} .+  
RewriteRule ^index\.php(/index\.php)+/?$ /index.php [R=302,L,QSA,NC]

RewriteCond %{QUERY_STRING} ^$ [OR]
RewriteCond %{REQUEST_URI} !index\.php/?$
RewriteRule ((^|/)index\.php)+/?(.*)$ /$3 [R=302,L,QSA,NC]