【问题标题】:How can I redirect every URL that's not requesting an JPEG or PNG image to index.php/x?如何将每个不请求 JPEG 或 PNG 图像的 URL 重定向到 index.php/x?
【发布时间】:2010-11-01 10:01:36
【问题描述】:

例如,我有一个寻找这样的图像的 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 的 URL 都应重定向到:

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。我不知道如何排除它们。

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    您可以排除特定的 URL:

    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}
    

    【讨论】:

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

      【讨论】:

        【解决方案3】:

        地狱是的,这是可能的。

        mod_rewrite 将为您轻松完成所有这些工作。

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

        mod_rewrite 需要一个正则表达式,而正则表达式让我头疼,所以我会让其他人写一个。

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            【解决方案5】:

            我会对 Gumbo 的回答稍作改动:

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

            它不包括文件夹和文件(!-d 标志) - 你可能不想要这个,但认为它属于这里是为了完整性。

            【讨论】:

              【解决方案6】:

              以下忽略现有文件、文件夹和扩展名匹配的文件: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]
              

              【讨论】:

                猜你喜欢
                • 2012-02-18
                • 1970-01-01
                • 1970-01-01
                • 2014-01-14
                • 1970-01-01
                • 1970-01-01
                • 2016-11-30
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多