Я использую следующий URL переписать, чтобы получить более красивые URL:
RewriteRule (\d+)/(.+) $2?companyId=$1 [NC,L,B,QSA,NE]
URL /invoices.php?companyId=123
может быть, например, выражено как /123/invoices.php
. Я проверил, и это работает нормально.
Проблема в том, что некоторые из моих php-файлов ссылаются на изображения и javascript по относительным URL- адресам , например, js/jquery.js
. Я думал, что эти файлы будут также покрыты моим URL перезаписи, который является довольно общим, но, очевидно, это не так и возвращает 404 вместо этого.
Пример: доступ к /123/js/jquery.js
в браузере возвращает ошибку 404: The requested URL /js/jquery.js was not found on this server.
Обратите внимание, как сообщение об ошибке относится к имени файла, которое было переписано с правильным именем файла. Если я скопирую и вставлю URL-адрес из сообщения об ошибке в поле URL моего браузера (без правила перезаписи), он вернет файл!
Единственная разница между файлом php (который работает) и моими файлами images/javascript заключается в том, что последние находятся в подкаталогах, а не на корневом уровне.
Помещение моего php-файла в подпапку /test
приводит к той же проблеме, например:
/35/test/invoices.php
=> The requested URL /test/invoices.php was not found on this server.
Опять же, mod_rewrite изменил путь, как и ожидалось, но apache не может найти файл. Доступ к нему напрямую работает нормально.
Проблема с javascripts и изображениями может быть легко решена с помощью абсолютных путей, так как им не нужен параметр companyId. Однако в будущем я могу захотеть структурировать свои php-файлы в подкаталогах, поэтому мне нужно исправить это сейчас.
Кто-нибудь знает, почему apache не может найти файлы в подкаталогах, когда путь прошел через модуль перезаписи?
Спасибо!
Гейр