2012-05-16 2 views
4

Я хочу создать плоские ссылки для своего сайта. .htaccess, код выглядит следующим образом:mod_rewrite apache для пользовательских плоских ссылок застревает

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^([0-9A-Za-z]+)?$ /index.php?page=$1 [L] 
    RewriteRule ^([0-9A-Za-z]+)/?$ /index.php?page=$1 [L] 
</IfModule>` 

Теперь мой сайт работы, которые можно увидеть через print_r($_GET) и получать все значения.

У меня есть такой код: <img src="images/icons/image.png" />, где изображение находится по пути: /images/icons/up.png.

Теперь я могу посетить мой сайт как: http://somedomain.com/home и все работает нормально. Но когда я положил: http://somedomain.com/home/, он застревает.

Изображение получило такой путь для браузера: http://somedomain.com/home/images/icons/image.png который не доступен, и он должен быть: http://somedomain.com/images/icons/image.png.

Как это решить?

Было бы полезно, если бы было какое-либо решение, изменив .htaccess, поскольку я хочу использовать относительные пути для всех ссылок, а не полный путь.


Благодаря Бен Клиффорду за вашу помощь. По его словам, если я переадресую второе правило в формат, похожий на первый, а не на index.php. Тогда это должно сработать.

Значит, людям есть идея, как это сделать? Я не могу это решить. Пожалуйста, помогите парням!

+0

Включите метатаг базового url в голову. Посмотрите, исправляет ли это проблему. – OptimusCrime

ответ

1

Вы можете изменить это второе правило перезаписи, чтобы перенаправить пользователя на не-версию пути, а не на index.php; то когда эта перенаправленная страница будет загружена, она попадет в первое правило с правильным базовым путем.

Проблема заключается в том, что имя изображения заменяет все после последнего/в URL-адресе: когда вы говорите somedomain.com/home, тогда имя файла изображения добавляется к somedomain.com/, но во втором случае final/is после дома. Использование правила перезаписи для обрезки этого/выключенного будет исправлять это, я думаю.

+0

Хорошо, понял. Но было бы полезно, если бы вы создали этот код для перенаправления, как вы заявили, так как я новичок в этом mod_rewrite. –

+0

возможно это: RewriteRule^([0-9A-Za-z] +) /? $/$ 1 [R] –

+0

Да, это работает ... спасибо! :) –

Смежные вопросы