例如,我有一个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的此类网址都应重定向到:
其中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。我不知道如何排除它们。
答案 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
答案 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]