2015-02-14 3 views
1

У меня есть страница player.php, и если нет переменной 0 GET, то она будет получать текущий пользователь, как определено в глобальной переменной. Это работает. Это просто, когда я пытаюсь реализовать переписывания, у меня возникают проблемы.

Сначала я должен был это:

RewriteEngine On 

RewriteRule ^player/([^/]+) player.php?playerid=$1 [NC,L] 

^Работала хорошо, если переменная playerid была установлена, но если не я только что получил 404

Далее я попытался исправить

RewriteEngine On 

RewriteRule ^player player.php [NC] 
RewriteRule ^player/([^/]+) player.php?playerid=$1 [NC,L] 

^Итак, теперь они все просто загружают профиль текущего пользователя независимо от playerid

Поэтому я изменил подходить полностью

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC] 
RewriteRule ^player/([^/]+) player.php?playerid=$1 [NC,L] 

^Это работало не устанавливая playerid, но если кто-то установить его присоединяет .php на конце. Поэтому он считает, что player/1 - player/1.php. Что, конечно же, прерывает запросы, которые я пытаюсь запустить, чтобы получить информацию о игроке.

ответ

1

Ваша первая попытка правильно, но вам необходимо отключить опцию MultiViews.

Options -MultiViews 
RewriteEngine On 

RewriteRule ^player/([^/]+)/?$ player.php?playerid=$1 [NC,L,QSA] 

Опция MultiViews используется Apache's content negotiation module, который работает передmod_rewrite и делает сервер Apache расширения соответствия файлов. Таким образом, /file может быть в URL-адресе, но он будет обслуживать /file.php.

+1

Отлично спасибо – cameronjonesweb

+0

Ненавижу говорить об этом, но он работал 12 часов назад, но сейчас он не работает – cameronjonesweb

+0

Трудно понять, что могло произойти за 12 часов на вашем сервере. Это действительно проверенное и работающее решение для меня. – anubhava

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