Перезапись / foo в /foo.php не работает - PullRequest
0 голосов
/ 05 июня 2011

Я хочу, чтобы пользователи могли заходить в / foo и отображать /foo.php. Быстрый поиск в Google придумал это:

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

По некоторым причинам, однако, это не работает. Я продолжаю получать ошибку 404, хотя я знаю, что файл .php существует. Я искал и искал ответ, но, похоже, он отлично работает для всех остальных.

Кстати, я прокомментировал другие правила, поэтому ничто не противоречит этому.

Есть идеи?

Ответы [ 6 ]

3 голосов
/ 05 июня 2011

Это то, что вам нужно:

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
1 голос
/ 06 июня 2011

Я нашел ответ! По-видимому, это проблема конфигурации сервера 1and1. Эта статья объясняет проблему: http://tips.webdesign10.com/web-hosting/why-you-should-never-use-1and1-com-hosting

Первый комментарий также является решением. Вот правило, которое работает:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /$1.php [L,QSA]
1 голос
/ 05 июня 2011

Вам нужно это правило:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /$1.php
1 голос
/ 05 июня 2011

Может быть, вам нужно добавить директиву AllowOverride All в вашей конфигурации Apache или, возможно, вам нужно добавить RewriteEngine On в самом начале вашего файла .htaccess

0 голосов
/ 05 июня 2011

Эта проблема возникает при использовании .htaccess в подпапке. Исправьте это, используя полные пути из корневого каталога в вашем файле .htaccess. Например, в папке http://www.mysite.com/test/ ваш файл .htaccess будет выглядеть так:

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /test/$1.php

- не тестировалось, может потребоваться настройка -

0 голосов
/ 05 июня 2011

в качестве альтернативы вы можете использовать опцию apache MultiViews:

Options +MultiViews
...