我的.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忽略索引文件?
答案 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路径。