2010-01-14 4 views
0

domain.com/index/ в domain.com/index.phpApache правила mod_rewrite проблемы

domain.com/index/hello к domain.com/index.php/hello

сайт является использование path_info, и правило по умолчанию не работает:

RewriteRule ^([^/]+)/(.*)$  $1.php/$2 [L] 

я изменяю: RewriteRule ^([^/.]+)((/[^/]+)*)/?$ $1.php$2 [L]

Это было странно

domain.com/index/ в domain.com/index.php работает отлично

domain.com/index/hello в domain.com/index.php/hello не работает

и он говорит Не указан входной файл.

Php выполняется в быстром режиме CGI в апача

ответ

0

Я считаю, что это должно быть:

RewriteRule ^([^/]+)/(.*)?$  $1.php/$2 [L] 

Так вторая группа является необязательной.

Кроме того, я бы посоветовал не использовать переменную, переданную в URL-адресе для сопоставления файлов, это может привести к проблемам безопасности.

+0

я изменяю: RewriteRule^([^ /.] +) ((/ [^ /] +) *) /? $ $ 1.php $ 2 [L]
http://domain.com/index/ to http://domain.com/ index.php отлично работает
http://domain.com/index/hello to http://domain.com/index.php/hello не работает –

0

Очевидно, что вашему регулярному выражению нужно бежать за /. Попробуйте вместо этого:

RewriteRule ^([^\/]+)\/(.*)$  $1.php/$2 [L] 
+0

Спасибо, но это не работает –

0
I change to: RewriteRule ^([^/.]+)((/[^/]+)*)/?$ $1.php$2 [L] 

Это было странно

domain.com/index/ к domain.com/index.php работает отлично

domain.com/index/hello к домену .com/index.php/hello не работает

и он говорит Указанный входной файл не указан.

+0

Попробуйте проверить apache 'access_log'. Вы можете найти там результат перевода .htaccess.Ошибка обычно из-за того, что apache не передавал 'PATH_INFO' в php. ! –

0

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

RewriteCond $1 !.+\.php$ 
RewriteRule ^([^/]+)/(.*)$  $1.php/$2 [L] 

В противном случае /index.php/hello также будет переписан /index.php.php/hello и что будет переписан /index.php.php.php/hello и что ...

+0

Я добавил RewriteCond% {REQUEST_FILENAME} -d RewriteCond% {REQUEST_FILENAME} .php -f –

+0

@ni: Это, вероятно, проблема: '% {REQUEST_FILENAME} .php -f' не удается, и поэтому ничего не перезаписывается. Просто попробуйте мое правило. – Gumbo

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