Как я могу перенаправить каждый URL, который не запрашивает изображение JPEG или PNG, в index.php / x? - PullRequest
0 голосов
/ 09 июня 2009

Например, у меня есть URL, который выглядит как изображение:

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

Я не хочу их перенаправлять. Они должны просто пройти. Но тогда у меня есть такие URL:

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

Все такие URL, которые не запрашивают .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 ]

3 голосов
/ 09 июня 2009

Вы можете исключить определенные 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 голосов
/ 09 июня 2009
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} ^.+\.png$ [OR]
RewriteCond %{REQUEST_FILENAME} ^.+\.jp(e)?g$ 
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php/%{REQUEST_URI} [NC,L]
1 голос
/ 09 июня 2009

Я бы использовал небольшое изменение в ответе Гамбо:

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

Это исключает папки и файлы (флаг! -D) - вы можете не хотеть этого, но думаете, что оно принадлежит здесь для полноты.

1 голос
/ 09 июня 2009

Поместите что-то вроде этого в файл .htaccess и убедитесь, что mod_rewrite включен:

RewriteEngine On

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

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

1 голос
/ 09 июня 2009

Черт, да, это возможно.

mod_rewrite сделает все это за вас довольно легко.

Вы также можете настроить обработчик ошибок, чтобы каждые 404 на вашем сайте перенаправлялись через index.php. Это хороший маленький способ убедиться, что все запросы загружают index.php (или ваш загрузчик).

Для mod_rewrite понадобится регулярное выражение, и оно повредило мою голову, поэтому я позволю кому-то другому написать его.

Надеюсь, это поможет. Просто прокомментируйте, если вам нужна дополнительная информация от меня. :)

0 голосов
/ 10 июня 2009

Следующее игнорирует существующие файлы, папки и файлы с расширением соответствия: jpg, jpeg, png, gif. Если вы хотите добавить дополнительное расширение, просто добавьте «| extension» перед) $ в строке 3.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !.(jpg|jpeg|png|gif)$
RewriteRule ^(.*)?$ /index.php/$1 [QSA,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...