Проблемы правил Apache mod_rewrite - PullRequest
0 голосов
/ 14 января 2010

domain.com / индекс / в domain.com/index.php

domain.com / индекс / привет в domain.com/index.php/hello

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

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

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

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

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

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

и там написано Входной файл не указан.

Php запускается в быстром режиме cgi в apache

Ответы [ 4 ]

0 голосов
/ 14 января 2010

Вам необходимо исключить совпадения, заканчивающиеся на .php:

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

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

0 голосов
/ 14 января 2010

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

RewriteRule ^([^\/]+)\/(.*)$      $1.php/$2   [L]
0 голосов
/ 14 января 2010
I change to: RewriteRule ^([^/.]+)((/[^/]+)*)/?$ $1.php$2 [L] 

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

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

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

и там написано Входной файл не указан.

0 голосов
/ 14 января 2010

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

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

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

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

...