.htaccess RewriteRule добавляет путь к диску в URL - PullRequest
0 голосов
/ 25 апреля 2011

Я использую Zend Server CE (v.5.1.0), установленный на C: на машине с Win7.Я добавил один проект в httpd.conf , добавив:

Alias /project "D:\Homepages\project"
<Directory "D:\Homepages\project">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

Мой .htaccess файл в каталоге project содержит следующее:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^/\w*\.(css|js) [NC]
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Теперь к проблеме;если я перейду к

http://localhost/project/index.php

все будет работать нормально.Я достигаю файла index.php и получаю свое содержимое.Однако, если я перейду на любую другую страницу, которая вызовет RewriteRule, он, похоже, добавляет путь к каталогу.FireFox выводит следующее сообщение Not Found :

Запрошенный URL /Homepages/project/index.php не найден на этом сервере.

Я пытался найти подобный вопрос / ответ здесь, но не смог.Любая идея?Ps.Принятие ответа может быть отложено, так как я на некоторое время уйду по поручению.

Ответы [ 2 ]

5 голосов
/ 27 апреля 2011

Вам необходимо установить директиву RewriteBase; в противном случае mod_rewrite автоматически и по умолчанию добавляет путь к файлу к результирующему правилу перезаписи.

От: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

Когда происходит замена для нового URL-адреса, этот модуль должен повторно внедрить URL-адрес в обработку на сервере. Для того, чтобы сделать это, ему нужно знать, что такое соответствующий URL-префикс или URL-база. По умолчанию этот префикс представляет собой соответствующий путь к файлу. Однако для большинства веб-сайтов URL-адреса НЕ напрямую связаны с физическими путями к именам файлов, поэтому это предположение часто ошибочно! Поэтому вы можете использовать директиву RewriteBase, чтобы указать правильный URL-префикс. Если URL вашего веб-сервера не связаны напрямую с физическими путями к файлам, вам нужно будет использовать RewriteBase в каждом файле .htaccess, где вы хотите использовать директивы RewriteRule.

1 голос
/ 25 апреля 2011

Последняя строка должна выглядеть так:

RewriteRule ^.*$ /index.php [NC,L]

Однако я думаю, что это бесконечный цикл, поэтому я бы предложил это правило:

RewriteCond %{THE_REQUEST} !\s/index.php [NC]
RewriteCond %{REQUEST_URI} !^/index.php [NC]
RewriteRule . /index.php [L]

, который запрещает переход к index.php, если он уже /index.php.

...