将所有请求重定向到index.php,但有异常

时间:2015-01-25 23:47:43

标签: php apache .htaccess mod-rewrite

我到处搜索试图找到一个我认为特别常见的问题的解决方案,但我似乎找不到任何有用的东西。

我使用mod_rewrite通过我自己的CMS(index.php)重定向所有请求。这是htaccess代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

(上面的mod_rewrite与标准Wordpress安装中的代码完全相同,这就是为什么我对如何找不到以下问题的解决方案感到困惑) < / p>

我想在视频缩略图中添加一些图像处理功能。我写了一个很好的PHP脚本(video-image.php),但我似乎找不到重定向图像网址的方法,同时保持index.php重定向不变。我正在寻找的代码就是这样的:

RewriteRule ^images/video/(.*)/(.*).jpg /images/video/video-image.php?video_image_id=$2&video_image_width=$1 [NC]

但上面的代码似乎与将我的请求发送到index.php的mod_rewrite冲突。我似乎可以将图像重定向到video-image.php或将我的页面重定向到index.php但是必须有办法同时执行这两种操作?

如果我没有足够清楚地解释自己,我总是发现mod_rewrite令人困惑如此道歉。所有的PHP脚本在没有mod_rewrite的情况下运行良好,所以我确定它不是php问题。

如果有人能对这个问题有所了解或指出我的答案,我真的很感激!

1 个答案:

答案 0 :(得分:3)

你的问题的要点是重写块的排序。您通常会将更具体的内容置于一般规则之上。在你的情况下:

# specific
RewriteRule ^images/video/(.*)/(.*).jpg /images/…
# generic
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Apache 2.4及更高版本的更好方法是使用FallbackResource而不是RewriteCond / Rule blob:

RewriteRule ^images/video/(.*)/(.*).jpg /image
FallbackResource index.php

还有两件事:

<IfModule mod_rewrite.c>
</IfModule>

通常使用的东西。条件指令在Apaches核心配置中有意义。对于.htaccess RewriteRule阻止它不太可取。 mod_rewrite不太可能在运行时随机脱离。如果有的话,您宁愿在日志中发现HTTP 500错误,而不是用户看到404 Not Found结果。

同样RewriteBase可以缩短某些规则或抽象其住所。但你也不应该习惯性地使用它。而只是将blog/添加到匹配规则中,并将所有重写汇总到DOCUMENT_ROOT / .htaccess(或者更好的VirtualHost部分以获得性能)。