2012-06-16 2 views
0

Поэтому я использую простое правило перезаписи, как:mod_rewrite неприятности

RewriteEngine On 
RewriteRule ^foo/?$ foo.php [NC,L] 

Он прекрасно перенаправляет foo.php, но кажется, что все ссылки и изображения в foo.php принимаются из папки обув на сервер которого не существует. Например, 1.png теперь будет foo/1.png или index.html теперь будет foo/index.html. Поэтому мой вопрос: есть ли способ сделать все правильно, не меняя пути к файлам в foo.php?

+0

Нет * хорошего * пути без изменения путей. Если это вообще возможно, сделайте это. –

ответ

1

В браузере посетителей вашего сайта отображается текущая страница /foo/, поэтому все относительные URL-адреса будут разрешены в диапазоне /foo/. Вам нужно будет установить base URL или обновить все относительные URL-адреса, чтобы указать на корень вашего сайта (например, не используйте relative/path/url.jpg, но /relative/path/url.jpg).

+0

Спасибо! это сработало! – Noobass

1

В своем коде вы должны предоставить правила перезаписи для ваших ресурсов (изображения, CSS, и т.д. ...) или добавить условия для реальных файлов/папок, как ...

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

Тест две RewriteCond линии чтобы увидеть, указывает ли запрошенный URL-адрес фактическому реальному каталогу (часть! -d), а второй проверяет, является ли он реальным файлом (! -f)

В будущем вы можете легко отладить свой материал mod_rewrite добавив эти две строки в файл .htaccess:

RewriteLogLevel 3 
RewriteLog "/path/to/a/file.log" 
0

2 простых способов

  1. абсолютизировать ссылки, как предполагают, по Ianzz
  2. удалить путь Foo для ссылочного объекта до сих пор используют HTAccess

    RewriteRule^Foo (/.* (JPG |. HTML | GIF | CSS)) $ $ 1 [L]

Я предпочитаю 2-ое решение, потому что Htaccess сделать беспорядок и Htaccess исправить ситуацию, и никаких изменений в коде не пе EDED.