2013-11-13 4 views
1
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteRule ^api/list/episode/([^/]*)$ /api/list/episode.php?season=$1 [QSA,NC,L] 
RewriteRule ^api/script/([^/]*)/([^/]*)$ /api/script/?season=$1&episode=$2 [QSA,NC,L] 

Правило переписан для api/list/episode придумывает Internal Server Error Я не знаю, почему, но другие правила работы, но я попытался изменитьHtaccess возвращается внутренняя ошибка сервера

это http://domain/api/list/episode?season=1

к этому http://domain/api/list/episode/1

Правильно ли мне разместить .htaccess в моем корне для всех изменений каталога?

+1

Apache обычно дает подробное сообщение об ошибке, так что вы не должны догадаться, но он не будет отображаться в на экране. Вам просто нужно проверить журнал ошибок. –

ответ

1

Это из-за петли. Измените это правило немного:

RewriteEngine on 

## If the request is for a valid directory 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
## If the request is for a valid file 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
## If the request is for a valid link 
RewriteCond %{REQUEST_FILENAME} -l 
## don't do anything 
RewriteRule^- [L] 

RewriteRule ^api/list/episode/([^/]+)/?$ /api/list/episode.php?season=$1 [QSA,NC,L] 
RewriteRule ^api/script/([^/]*)/([^/]*)$ /api/script/?season=$1&episode=$2 [QSA,NC,L] 

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

Попытайтесь изменить порядок своих правил. Два правила /api/ должны идти до правила расширения маршрутизации в php. Это связано с тем, что %{REQUEST_FILENAME} фактически проверяет внутренние элементы пути, поэтому он может ошибочно принять /api/list/episode/1 как /api/list/episode.php/1 как «существует», затем вы наклеиваете на .php до конца, что делает его: /api/list/episode/1.php. Он проходит через механизм перезаписи, и то же самое происходит снова, а затем цикл продолжается и продолжается.

RewriteEngine on 

RewriteRule ^api/list/episode/([^/]*)$ /api/list/episode.php?season=$1 [QSA,NC,L] 
RewriteRule ^api/script/([^/]*)/([^/]*)$ /api/script/?season=$1&episode=$2 [QSA,NC,L] 

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

Вы также можете попытаться изменить вас -f проверить:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f 
Смежные вопросы