htaccess重定向问题

时间:2009-08-07 03:16:37

标签: .htaccess mod-rewrite

我的.htaccess看起来像这样:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !(\.gif)|(\.jpg)|(\.png)|(\.css)|(\.js)|(\.php)|(\.swf)|(\.xpi)|(\.ico)|(\.src)$ 
RewriteCond %{REQUEST_URI} ^(.*)$
#RewriteCond %{REQUEST_FILENAME} ! -f

RewriteRule (.*)$ view.php?picid=$1 [L]

问题是,当我访问www.example.com时,它会将我发送给view.php。我的根目录中有一个index.php文件。如何让.htaccess忽略索引文件?

2 个答案:

答案 0 :(得分:1)

从第四行删除#并删除感叹号(!)和-f

之间的空格
RewriteCond %{REQUEST_FILENAME} !-f

此行表示如果服务器上尚不存在该文件,在这种情况下为index.php,则继续并执行后续重写。

同时检查您是否同时拥有DirectoryIndex并检查任何有效目录。

DirectoryIndex index.php

RewriteCond %{REQUEST_FILENAME} !-d

哪个会让你使用这个更干净的版本:

DirectoryIndex index.php

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)$ view.php?picid=$1 [L]

首先将index.php设置为默认文件。然后运行Rewrite引擎,如果服务器上已经存在请求的文件作为文件或目录,则会将事情传递给view.php文件并运行其魔法。

答案 1 :(得分:1)

尝试此规则:

RewriteCond %{REQUEST_URI} !.*\.(gif|jpg|png|css|js|php|swf|xpi|ico|src)$ [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) view.php?picid=$1 [L]

我做出的重大改变:

  • 您的第一个RewriteCond中的正则表达式有问题。 $锚点仅应用于更改中的最后一个选项。
  • 第二个RewriteCond指令没用。
  • 注释掉的第三个RewriteCond将完成您想要的操作:检查请求的URI路径是否可以映射到现有文件。
  • 将量词从零或更多更改为一个或多个字符。这将在请求/时排除空URI路径。