2009-08-07 134 views
0

我的.htaccess看起来是这样的: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忽略索引文件?

回答

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路径。
+0

works great , 谢谢。 – mrpatg 2009-08-08 06:23:45

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作为默认文件。然后运行重写引擎,并且如果请求的文件不是以文件或目录的形式存在于服务器上,则会将其传递到view.php文件并运行它的魔法。

+0

我改变了它,但没有效果。我尝试添加一个if(isset($ picid){} else {header('Location:http://website.com');}但它仍然显示错误 – mrpatg 2009-08-07 05:02:03

+1

您尝试将php添加到.htaccess文件中吗? – mpen 2009-08-07 05:11:04