тот же файл с .php и без .php без какого-либо mod_rewrite RewriteRule - PullRequest
0 голосов
/ 12 января 2011

Я установил Apache (на Ubuntu) с некоторыми vhosts.В www-каталогах у меня есть файл (например) с именем info.php.И я могу открыть этот файл с помощью /info.php AND / info (без .php в конце).

В Vhost или dir нет правила mod_rewrite.

И еслиЯ пытаюсь переписать правило, например:

RewriteRule ^info$ http://www.google.com/ [R=307,L]

и переоткрыть / info (без .php), оно не работает.

Когда я изменяю роль на

RewriteRule ^info.php$ http://www.google.com/ [R=307,L]

и снова откройте / info, она работает.

И когда я попробую это правило:

RewriteRule ^ (. *) $ Echo.php? Value = $ 1 [L]

и откройте сайт типа / foo и напечатайте значение $, которое я получаю " echo.php ".Когда я пытаюсь / foo / bar, я получаю " echo.php / bar "

У кого-нибудь есть совет для меня?

Добавить: Вот некоторая информация изphpinfo ():

SCRIPT_FILENAME /var/www/test/echo.php 
QUERY_STRING    value=echo.php
REQUEST_URI     /foo
SCRIPT_NAME     /echo.php 

Ответы [ 3 ]

1 голос
/ 12 января 2011

Вам нужно RewriteCond перед вашим RewriteRule, которое соответствует базовому случаю, когда перезапись не должна выполняться.В противном случае ваш перенаправленный запрос также будет переписан.

0 голосов
/ 12 января 2011

Возможность доступа к файлам без необходимости записи расширений вызвана MultiViews опциями в Apache. Чтобы отключить его, используйте:

Options -Multiviews

Вы можете попробовать отключить его и посмотреть, работает он или нет.

В качестве альтернативы для echo.php вы можете просто использовать:

RewriteRule . echo.php [L]

А затем сделайте echo.php проверку из REQUEST_URI, которая содержит первоначально запрошенный путь.

0 голосов
/ 12 января 2011

Знак доллара отмечает конец строки. Вы можете использовать (не проверено):

RewriteRule ^info(.php)?$ http://www.google.com/ [R=307,L]
...