Как сделать красивую строку запроса URL - PullRequest
1 голос
/ 26 октября 2011

У меня есть весь веб-сайт, построенный на схеме ссылок строк запроса (т.е.? Page = about или? Page = Individual & i = johndoe). Конечно, в ретроспективе мы решили использовать другую (изящную) схему, чтобы быть более дружелюбными к SEO (т.е. / about / or /individual/johndoe/).

Есть ли способ выполнить это изменение, используя mod_rewrite в файле Apache .htaccess, не изменяя все ссылки по сторонам? Например, если вы нажмете на ссылку? Page =, она перенаправит вас на /about/.

.

Код, который я попробовал, будет успешно отображаться / about / as? Page = about, однако перенаправление не задействовано. И если честно, я никогда не делал никакой работы в mod_rewrite (и это немного пугающе), поэтому я чувствую, что иду в неправильном направлении. Тем не менее, вот код, с которым я работал до сих пор:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_]+)$ /$1/ [R]
RewriteRule ^([a-zA-Z0-9_]+)/$ /index.php?page=$1

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$  /$1/$2/ [R]
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&i=$2
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&id=$2
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&bctid=$2
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&bclid=$2

Есть мысли? Я очень ценю любую помощь.

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

Первый ... Перезапись будет применяться только к запросам на переписывание. В результате ваши изменения, перечисленные в ваших вопросах, теперь позволят получить доступ к странице двумя способами:

/index.php?page=about
/about/

Это означает, что если вы не внесете изменения на своем сайте, вы не будете вносить значительных изменений, поскольку все указывают на неправильный URL.

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

При этом я думаю, что есть некоторый SEO-динг, поскольку на всех страницах происходит перенаправление, и никто не указывает на более приятные URL-адреса напрямую. Это может не дать вам желаемых результатов. Другой вариант - использовать те регулярные выражения, которые вы предоставляете, и фактически изменить реальный код во всех ваших представлениях. Это может быть легко или сложно в зависимости от того, как вы делаете свои ссылки.

Удачи.

Разъяснение

Я читаю ваши вопросы, поскольку вы хотите несколько разных вещей:

  1. вы не хотите ничего менять в работе вашего сайта, но вам нужны красивые URL-адреса (возможно, вы используете фреймворк, заставляющий страницы так называться). Это означает, что вам нужно поддерживать как уродливые, так и красивые URL, что означает, что вам нужен mod_rewrite, чтобы обе версии работали.
  2. Ваша цель - сделать лучшие URL для поисковых систем. Это означает, что вы должны «поощрять» пользователей, которые используют уродливые URL-адреса, вместо этого использовать красивые URL-адреса. В этом случае вы, вероятно, должны очистить ваши старые URL на вашем сайте. Если нет, Google продолжит сканировать ужасные URL-адреса (поскольку они будут единственными, которые он видел).
  3. Вы не можете очистить URL других людей, поэтому вам, вероятно, следует mod_redirect их ссылки на ужасные ссылки на ваши хорошие. Таким образом, Google найдет красивые URL-адреса. (В этой части я не уверен. Будут ли mod_redirect и mod_rewrite вызывать цикл? Я думаю, что нет, но если это произойдет, то только # 1 и # 2 будут выполнимыми, и вам просто нужно жить с другими сайты людей, указывающие на ваши уродливые URL
0 голосов
/ 14 июля 2014

Я имею в виду лучший способ, как это сделать:

 RewriteRule ^([a-zA-z0-9-]+)/?([a-zA-Z0-9/-]+)?$ index.php?page=$1&par=$2

и в PHP:

 $page = $_GET["page"];
 $parm = split("/",$_GET["par"]);

 // first par
 $parm[0];
0 голосов
/ 27 октября 2011
RewriteEngine On

RewriteRule ^([a-zA-Z0-9_]+)$ /$1/ [NC,R=301]
RewriteRule ^([a-zA-Z0-9_]+)/$ /index.php?page=$1

RewriteRule ^(artists)/([a-zA-Z0-9_]+)$  /artists/$2/ [NC,R=301]
RewriteRule ^(artists)/([a-zA-Z0-9_]+)/$ /index.php?page=individual&i=$2

RewriteRule ^(photos)/([a-zA-Z0-9_]+)$  /photos/$2/ [NC,R=301]
RewriteRule ^(photos)/([a-zA-Z0-9_]+)/$ /index.php?page=photogallery&person=$2

RewriteRule ^(post)/([a-zA-Z0-9_]+)$  /post/$2/ [NC,R=301]
RewriteRule ^(post)/([a-zA-Z0-9_]+)/$ /index.php?page=post&id=$2
RewriteRule ^(rss)/([a-zA-Z0-9_]+)$  /rss/$2/ [NC,R=301]
RewriteRule ^(rss)/([a-zA-Z0-9_]+)/$ /index.php?page=post&rss=$2
RewriteRule ^(search)/([a-zA-Z0-9_]+)$  /search/$2/ [NC,R=301]
RewriteRule ^(search)/([a-zA-Z0-9_]+)/$ /index.php?page=post&q=$2

RewriteRule ^(video)/([a-zA-Z0-9_]+)$  /video/$2/ [NC,R=301]
RewriteRule ^(video)/([a-zA-Z0-9_]+)/$ /index.php?page=videogallery&bctid=$2
RewriteRule ^(playlist)/([a-zA-Z0-9_]+)$  /playlist/$2/ [NC,R=301]
RewriteRule ^(playlist)/([a-zA-Z0-9_]+)/$ /index.php?page=videogallery&bclid=$2

Вот что я в итоге использовал. Не уверен, что все эти флаги необходимы ... но он работает с использованием предыдущего кода. Мне все еще нужно поменять все ссылки по сторонам (внешний и внутренний), но я также должен добавить перенаправления для всех старых ссылок, если я пропускаю одну или в случае, если другие сайты ссылаются на старые страницы.

...