Mod_Rewrite, помогите! - PullRequest
       27

Mod_Rewrite, помогите!

2 голосов
/ 15 июня 2011

Я давно пользуюсь mod_rewrite и мне это нравится.Тем не менее, я немного озадачен тем, что делать.Вот что я хочу сделать:

У меня есть мобильная версия сайта, и я собирался перенаправить http://myflashpics.com/user/flashpics на http://myflashpics.com/mobile/user/flashpics

Вот мой код:

RewriteRule user/(.*)/$ /viewer/index.php?profile=$1
RewriteRule user/(.*)$ viewer/index.php?profile=$1

RewriteRule mobile/user/(.*)/$ /mobile/index.php?user=$1
RewriteRule mobile/user/(.*)$ mobile/index.php?user=$1

Но при переходе на мобильную версию показывается настольная версия?Что с этим?

Спасибо, Култон

Ответы [ 3 ]

2 голосов
/ 15 июня 2011

Ваше регулярное выражение для первых двух RewriteRules также соответствует вашему мобильному пути, поскольку user/(.*)/$ просто проверяет, соответствует ли шаблон в конце пути запроса. Вы должны добавить ^ в начало ваших тестов, чтобы они проверяли, что полный путь запроса совпадает, как показано ниже:

RewriteRule ^user/(.*)/$ /viewer/index.php?profile=$1
RewriteRule ^user/(.*)$ viewer/index.php?profile=$1

RewriteRule ^mobile/user/(.*)/$ /mobile/index.php?user=$1
RewriteRule ^mobile/user/(.*)$ mobile/index.php?user=$1

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

RewriteRule ^user/([^/]*)/?$ /viewer/index.php?profile=$1

RewriteRule ^mobile/user/([^/]*)/?$ /mobile/index.php?user=$1
0 голосов
/ 15 июня 2011

Мне не очень понятно, что вы пытаетесь сделать, но вы можете сжать свой код .htaccess так:

Options +FollowSymlinks -MultiViews
RewriteEngine On

RewriteRule ^user/(.*)/?$ /viewer/index.php?profile=$1 [L,NC,QSA]

RewriteRule ^mobile/user/(.*)/?$ /mobile/index.php?user=$1 [L,NC,QSA]
0 голосов
/ 15 июня 2011

Ваше первое правило совпадает с правилами для мобильных устройств, поскольку оно не ограничено user/, встречающимся в начале строки.Добавьте префикс ^, чтобы указать начало строки:

RewriteRule ^user/(.*)/$ /viewer/index.php?profile=$1
RewriteRule ^user/(.*)$ viewer/index.php?profile=$1

RewriteRule ^mobile/user/(.*)/$ /mobile/index.php?user=$1
RewriteRule ^mobile/user/(.*)$ mobile/index.php?user=$1
...