Как мне $ _GET получить правильный идентификатор - PullRequest
0 голосов
/ 15 декабря 2010

picture.php

if (!isset($_GET['id'])) {
    header('location:/');
    exit();
} else if (isset($_GET['id'])) {
    print_r($_GET);
}

$ _ GET output

 Array ( [page] => picture ) 

.htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-]+)/?$ /index.php?page=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/picture/?$ /picture/?id=$1 [L]

Формат URL: http://local.com/42/picture/

Вопрос: Как заставить $_GET['id'] печатать 42, а не picture

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

Флаг L вызывает повторное внедрение уже переписанного URL-адреса в процесс перезаписи. Поэтому, когда /42/picture/ переписывается в /picture/?id=42, оно переписывается в /index.php?page=picture.

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

RewriteCond %{REQUEST_FILNAME} -f
RewriteRule ^ - [L]
1 голос
/ 15 декабря 2010

Судя по выводу вашего var_dump, первое правило соответствует, а не второе. Порядок, в котором вы пишете правила, имеет значение, вам, вероятно, следует отменить эти два правила. Так как ваше первое правило короче.

RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-]+)/picture/?$ /picture/?id=$1 [L]
RewriteRule ^([A-Za-z0-9-]+)/?$ /index.php?page=$1 [L]

Вы можете взглянуть на документацию для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...