如何将每个不请求JPEG或PNG图像的URL重定向到index.php / x?

时间:2009-06-09 08:37:50

标签: php .htaccess mod-rewrite

例如,我有一个URL,用于查找如下图像:

  

http://example.com/img/foo.png
  http://example.com/img/interface/menu/bar.png
  http://example.com/static/users/avatars/small/3k5jd355swrx221.jpg

我不想重定向那些。他们应该通过。但是,我有这样的网址:

  

http://example.com/register/
  http://example.com/my_account/my_picture/
  http://example.com/contact/email/

所有不要求.png或.jpeg的此类网址都应重定向到:

  

http://example.com/index.php/x

其中x代表example.com/之后的所有内容,因此在此示例中为例如:

  

http://example.com/register/
  http://example.com/index.php/register/

     

http://example.com/my_account/my_picture/
  http://example.com/index.php/my_account/my_picture/

     

http://example.com/contact/email/
  http://example.com/index.php/contact/email/

(启用AcceptPathInfo)

在.htaccess中有没有办法做到这一点?我只知道如果我总是像http://example.com/someKindOfMarkerHere/stuff/stuff/stuff那样我可以做到这一点,但我不想让someKindOfMarker检测它是否是一个必须重写的URL。我不知道如何排除它们。

6 个答案:

答案 0 :(得分:3)

您可以排除特定网址:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/index\.php$
RewriteRule !.*\.(jpeg|png)$ index.php%{REQUEST_URI}

或者您排除任何现有文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php%{REQUEST_URI}

答案 1 :(得分:2)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^.+\.png$ [OR]
RewriteCond %{REQUEST_FILENAME} ^.+\.jp(e)?g$ 
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php/%{REQUEST_URI} [NC,L]

答案 2 :(得分:1)

天哪,这是可能的。

mod_rewrite可以很容易地为你完成所有这些。

您还可以设置错误处理程序,这样您网站上的每个404都会通过index.php重定向。这是确保所有请求加载index.php(或你的引导程序)的一个很好的小方法。

mod_rewrite需要一个正则表达式,正则表达式会伤到我的脑袋,所以我会让其他人写一个。

希望有所帮助。如果您需要我的更多信息,请发表评论。 :)

答案 3 :(得分:1)

将这样的内容放在.htaccess文件中,并确保启用了mod_rewrite:

RewriteEngine On

RewriteRule ^(.*?)(?!(\.png|\.jpg))$ index.php/$1

http://www.regular-expressions.info/lookaround.html

答案 4 :(得分:1)

我会对Gumbo的答案略有不同:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php%{REQUEST_URI} 

它排除文件夹和文件(!-d标志) - 你可能不会想要这个,但认为它完全属于这里。

答案 5 :(得分:0)

以下内容忽略扩展名匹配的现有文件,文件夹和文件:jpg,jpeg,png,gif。如果您想添加额外的扩展名,只需在第3行的$之前添加“| extension”。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !.(jpg|jpeg|png|gif)$
RewriteRule ^(.*)?$ /index.php/$1 [QSA,L]