2013-09-09 4 views
0

У меня есть URL-адрес, который я хочу переписать. mysite.com/accounts?id=test должен быть направлен в mysite.com/accounts.php?id=test. Я проверил свой mod_rewrite, он работает, поскольку другие страницы могут быть написаны правильно. Сейчас я пытаюсь это:Проблемы с переписыванием URL-адресов

RewriteRule ^accounts?([.]+)$ accounts.php?$1 [NC,L]

Это не похоже на работу. Это из-за вопросительного знака в регулярном выражении? Я попытался убежать от него, но он все еще не работает.

Любая помощь будет оценена по достоинству.

+0

Почему бы не потерять этот знак вообще и сделать идентификатор ни подпапкой, ни страницей. Тогда правило будет выглядеть примерно так: RewriteRule^accounts /([.]+). Html $ accounts.php? Id = $ 1 – furrie

+0

Возможно, я ошибаюсь, но почему точка между []? Это не то же самое, что '(. *)'? Я думаю, что 'RewriteRule^accounts? (. *) $ Accounts.php? $ 1 [NC, L]' должен работать. – Rik

+0

@Rik, этот вид сработал .. теперь найден хотя бы файл account.php. (он имел обыкновение давать 404). Теперь в первой строке я написал die ($ _ GET ['id']) только для проверки, он возвращает пустое. Есть идеи? – l3utterfly

ответ

1

Сначала я подумал, что ([.]+) - это то же самое, что и (.*).

Во-вторых, RewriteRule уже убирает ваш запрос_страницы из URL-адреса.
Доступ к нему можно получить с помощью %{QUERY_STRING}.

Так что ваш код будет

RewriteRule ^accounts?(.*)$ accounts.php?%{QUERY_STRING} [NC,L] 

Вы можете создать accounts.php следующим тесту:

<?php 
echo "<pre>"; 
print_r($_SERVER); 
exit(); 
// rest of your code 
?> 

, а затем проверить [QUERY_STRING].

+0

Удивительно, [QUERY_STRING] сделал трюк. Не знал об этом заранее ... – l3utterfly