假设
将所有内容重定向到index.php,但Images文件夹除外(如果文件存在)。 例如:
/ main / test => ?的index.php控制器=主&安培;行动=测试
/image/exists.png =>图像/ exists.png
/image/another.png =>索引控制器=图像&安培;行动= another.png
当前代码
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymlinks
RewriteCond "%{REQUEST_FILENAME}" "!-f"
RewriteRule ^image/(.*)$ index.php?controller=$1&action=$2 [NC,L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)/.*$ index.php?controller=$1&action=$2&v1=$3&v2=$4 [NC,L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)/$ index.php?controller=$1&action=$2&v1=$3&v2=$4 [NC,L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ index.php?controller=$1&action=$2&v1=$3&v2=$4 [NC,L]
RewriteRule ^(.*)/(.*)/(.*)/$ index.php?controller=$1&action=$2&v1=$3 [NC,L]
RewriteRule ^(.*)/(.*)/(.*)$ index.php?controller=$1&action=$2&v1=$3 [NC,L]
RewriteRule ^(.*)/(.*)/$ index.php?controller=$1&action=$2 [NC,L]
RewriteRule ^(.*)/(.*)$ index.php?controller=$1&action=$2 [NC,L]
RewriteRule ^(.*)/$ index.php?controller=$1 [NC,L]
RewriteRule ^(.*)$ index.php?controller=$1 [NC,L]
</IfModule>
不良反应和我请帮助的原因
如果我将路径放到现有文件夹中,您将被重定向到一条非常奇怪的路径。例如,如果我在浏览器中写入 localhost / image 之类的URL,我会得到像 localhost / image /?controller = Image 这样的URL。最后 - 它加载了一个好文件,但看起来很难看。
/ image =&gt; index.php?controller = image (但在浏览器的URL字段中: / image /?controller = Image )
PS如果我使用Firefox,我会在没有查询的情况下获得良好的URI。我认为这是因为Firefox在URL的末尾添加了一个斜杠而没有扩展名。
如何&#34;修复&#34;它?
答案 0 :(得分:1)
你的第一个问题是所有那些(。*),因为它们是贪婪的,REGEXP中的第一个将消耗直到行尾的所有字符。如果您只想要一个消耗最多 / 的REGEXP,请使用([^ /] *)或([^ /] +)
接下来要排除真实文件,您将要使用SKIP指令,例如。将以下内容粘贴在规则集的顶部:
# Skip the next 10 RewriteRule is the requested file physically exists, in the image
# directory
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^image/ - [S=10]