2013-03-22 3 views
0

мне нужно переписать URL из http://example.com/file.php?id=test&cat=category в http://example.com/file?test&cat=category я только достиг переписать путь /file.php к /file с:Rewrite URL с mod_rewrite

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^/?(\w+)$ $1.php [QSA,NC,L] 

Как переписать остальную часть URL? И второй вопрос: возможно ли заблокировать доступ по умолчанию к URL, чтобы пользователь мог использовать переписанный URL?

ответ

1

Для проверки значений в строке запроса вы должны использовать RewriteCond с переменной QUERY_STRING, как это:

RewriteCond %{QUERY_STRING} ^([a-z]+)&cat=([a-z]+)$ 

Это говорит о том, что RewriteRule необходимо выполнить, только если строка запроса содержит набор последовательные строчные буквы, сопровождаемые амперсандом, затем «cat =», за которым следует другой набор последовательных букв. Группы захвата могут быть использованы в следующем RewriteRule с использованием %1 и %2 вроде этого:

RewriteRule ^([a-z]+)$ $1.php?id=%1&cat=%2 [L] 

Вы не хотите использовать QSA флаг, потому что добавит недопустимый строку запроса пользователя к концу вашего переписанного URL , Вы можете по-прежнему использовать флаг NC, чтобы игнорировать регистр в шаблоне соответствия, но, по возможности, лучше всего работать с именами только в нижнем регистре.

Что касается блокировки запросов к финализированному пути (.php), я не могу придумать, как это сделать, потому что даже финализированный URL-адрес должен проходить через правила .htaccess, поэтому запрет доступа к нему приведет к перенаправления.

+0

Спасибо за ответ, это очень помогло мне. –

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