根据文件是否存在,通过.htaccess重定向所有URL和文件请求

时间:2012-03-13 20:29:35

标签: php apache .htaccess mod-rewrite rewrite

以下是我要做的事情:

  • 当从文件系统请求文件但该文件不存在时,请将URL重写为/index.php?404
  • 当请求文件并且文件系统中存在该文件时,将URL重写为/index.php?file
  • 在所有其他情况下,将URL重写为/index.php?data

但是我得到了500个错误,有人知道问题可能在哪里吗?我过去使用过RewriteEngine,但对于如何将它用于此类特殊情况,我仍然有点困惑。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} (.*\.([a-zA-Z]{2,4}))$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* ./index.php?404 [L]

RewriteCond %{REQUEST_FILENAME} (.*\.([a-zA-Z]{2,4}))$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* ./index.php?file [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* ./index.php?data [L]

1 个答案:

答案 0 :(得分:1)

你有无限的重写循环。要解决 - 添加额外条件以不重写已经重写的URL ..或者至少忽略对index.php的请求。

可能的方法之一:

# do not touch any requests to index.php
RewriteRule ^index\.php$ - [L]

<强> P.S。 L旗如何运作:RewriteRule Last [L] flag not working?