将所有内容重定向到index.php并删除最后一个斜杠

时间:2013-05-21 20:03:07

标签: php .htaccess url mime-types

我目前有以下代码将所有请求(文件除外)重定向到index.php,遗憾的是我无法让我的脚本工作,因为当我的网址以斜线结尾时发生了一些奇怪的mime类型错误。

奇怪的是,我的代码输出与两个网址相同,但错误仅出现在/结尾。

所以我正在寻找一种方法来重定向所有请求,因为它现在正在工作,只是没有斜线或只是解决mime类型问题,但我不知道是什么导致它...

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  # Options +SymLinksIfOwnerMatch
  RewriteEngine On

  # Redirect /index.php to / (optional, but recommended I guess)
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php
  RewriteRule ^index.php/?(.*)$ $1 [R=301,L]

  # Run everything else but real files through index.php
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1?%{QUERY_STRING} [L]
</IfModule>

2 个答案:

答案 0 :(得分:2)

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,L]
</IfModule>

QSA =查询字符串附加,它将保留查询字符串。

如果index.php是一个文件,并且该文件存在,那么它将不会传递测试,因此不需要第一个RewriteCond阻止。

答案 1 :(得分:-1)

您不能在斜杠中使用URL结尾。 如果我理解你正确,你正在使用的URL是

www.server.com/index.php/[more here]

这是不正确的URL语法。您只能使用get字符串跟随.php -

www.server.com/index.php?some_url_param=some_value

someparametershere