автоматическое перенаправление на чистые URL - PullRequest
2 голосов
/ 08 апреля 2011

как я могу автоматически перенаправить сайт с грязного URL на чистый URL в php, что-то вроде

http://www.mysite.com?page=page1&action=action1

до

http://www.mysite.com/page1/action1

Ответы [ 3 ]

5 голосов
/ 08 апреля 2011

Вы должны проверить, был ли это чистый запрос или нет. В противном случае вы попадете в бесконечный цикл

Вот пример из одного из моих проектов:

.htaccess

RewriteEngine On
RewriteRule ^game/([0-9]+)/ /game.php?newid=$1

game.php

if (isset($_GET['id'])) {
  $row = dbgetrow("SELECT * FROM games WHERE id = %s",$_GET['id']);
  if ($row) {
    Header( "HTTP/1.1 301 Moved Permanently" ); 
    Header( "Location: /game/".$row['id']."/".seo_title($row['name'])); 
  } else {
    Header( "HTTP/1.1 404 Not found" ); 
  }
  exit;
}

if (isset($_GET['newid'])) $_GET['id'] = $_GET['newid'];

Итак, вы должны проверить, был ли это прямой «грязный» вызов или переписан.
А затем перенаправить только если прежний.
Вам также нужен код для создания чистого URL.

И очень важно показывать 404 вместо перенаправления в случае неправильного URL.

3 голосов
/ 08 апреля 2011

Если вы используете Apache, вы можете использовать модуль mod_rewrite и установить правила в файле .htaccess в ваших папках httpdocs или веб-корне.Я не вижу никакой причины вызывать процесс PHP для перенаправления, когда компоненты более низкого уровня сделают работу намного лучше.

Пример от Саймона Карлетти :

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/page\.php$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^(.*)$ http://mydomain.site/page/%1.pdf [R=302,L]
2 голосов
/ 08 апреля 2011

try

header("Location: http://www.mysite.com/".$_GET['page']."/".$_GET['action']);

. Вы должны проверить, установлены ли значения, прежде чем пытаться перенаправить

.
...