ПереписатьКонд на .htaccess - PullRequest
1 голос
/ 20 января 2011

Я пишу RESTful API для своего веб-сервиса.
Я хочу, чтобы все вызовы следующего шаблона вызывали php-файл, который находится в /myserver/api/controller.php Шаблон:
http: /www.mydomain.com/api/user
http: /www.mydomain.com/api/resource

В основном все вызовы для http://www.mydomain.com/api/* должны запускаться /api / controller.php

В настоящее время мой .htaccess находится в / api и выглядит так:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . controller.php

ОБНОВЛЕНИЕ 1:
.htaccess в родительском каталоге:

RewriteEngine On
RewriteCond %{HTTP_HOST} !:9000$
RewriteCond %{SCRIPT_FILENAME} \.php$ [OR]
RewriteCond %{REQUEST_URI} ^$
RewriteRule ^(.*)$ http://%{HTTP_HOST}:9000/$1 [P,L]
RedirectMatch 301 /jobs$ http://someurl
RedirectMatch 301 /support/$ http://someurl
RedirectMatch 301 /jobs$ http://someurl
RedirectMatch 301 /someurlA http://someurlB

Как мне написать файл .htaccess?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 20 января 2011

Как насчет этого:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ controller.php?q=$1 [L,QSA]

Это перенаправит запрос как /api/user/5 на /api/controller.php?q=user/5. '' QSA '' также сохранит все переменные строки запроса, которые уже присутствуют.

1 голос
/ 20 января 2011
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* controller.php [L]

Обновление:

RewriteEngine On
RewriteBase /api
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* controller.php [L]
0 голосов
/ 20 января 2011

Не ясно, что Apache вообще читает ваш файл .htaccess. Попробуйте вставить туда директиву Wooga и посмотрите, получите ли вы ошибку 500.

Кроме того, не используйте файлы .htaccess для mod_rewrite (или что-либо еще, в этом отношении), если у вас нет другого выбора.

ОБНОВЛЕНИЕ 1

Хорошо, значит, ваш файл .htaccess читается. Следующий шаг - попробовать более простое правило. Что-то вроде:

RewriteEngine On
RewriteRule ^ http://httpd.apache.org/

Если это работает, значит, вы знаете, что mod_rewrite работает, и проблема заключается в совпадении в ваших правилах.

ОБНОВЛЕНИЕ 2

Итак, mod_rewrite работает, это означает, что ваши правила не соответствуют. Попробуйте удалить условия, но оставьте правило как есть.

RewriteEngine On
RewriteRule . controller.php

Если это вызывает цикл, измените его на:

RewriteEngine On
RewriteRule !controller.php controller.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...