如何使用.htaccess删除index.php

时间:2014-03-01 10:07:46

标签: .htaccess mod-rewrite

我使用了下一个.htaccess代码:

RewriteEngine on
# if the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule ^(.*)$ index.php/$1 [L]

它工作得很好,但它可以使用index.php并且没有它的所有页面都可用,例如:

http://localhost/framework/about
http://localhost/framework/index.php/about // need redirect to http://localhost/framework/about

我想将带有index.php的所有请求重定向到没有index.php的SEO原因,如何删除index.php

2 个答案:

答案 0 :(得分:2)

试试这个

RewriteEngine on

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/([^/]+)/index\.php/(.+)\s [NC]
RewriteRule ^.*$ /%1/%2 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]


  1. %{THE_REQUEST}包含由...发送的完整HTTP请求行 浏览器到服务器(例如,GET /index.html HTTP/1.1
  2. 条件RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/([^/]+)/index\.php/(.+)\s [NC]GET /xxx/index.php/yyyy匹配,其中 xxx framework yyy about/something/what/you/want或者只是about如果你 想要(可能也是POST或另一个而不是GET,但这并不重要。)
  3. 示例:/framework/index.php/everything/about/me将重定向至/framework/everything/about/me,或/framework/index.php/about将重定向至/framework/about

答案 1 :(得分:1)

非常确定以下内容会将所有内容重定向到$_SERVER['PATH_INFO']

中的index.php var
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !.index.ph.*
RewriteRule ^(.*)$  /index.php

自从我使用这种方法以来已经有一段时间了。

或者你可以像这样使用ForceType

<Files *>
    ForceType application/x-httpd-php
</Files>
<Files *\.*>
    ForceType None
</Files>

这将允许您拥有一个名为about的PHP文件(无扩展名)并将其作为PHP执行。