Как отличить запросы документов от переменных запросов?и как учесть URL, которые не ожидаются? - PullRequest
0 голосов
/ 09 апреля 2010

Мое последнее сообщение было встречено умными, бесполезными "ответами" (комментариями), так что я получу право на это:

если у меня есть файл htaccess, например:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^([^/]+)/([^/]+)$ /index.php?page=$1&subject=$2
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]

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

/page/subject?urlvar1=value1&urlvar2=value2

и получить нужную мне страницу, не создавая неожиданных результатов?

Любая реальная помощь очень ценится. Спасибо!

1 Ответ

2 голосов
/ 09 апреля 2010

вам нужно добавить флаг [QSA] (добавление строки запроса) в ваши правила.

Как общий совет, лучше иметь только одно общее правило, такое как

 RewriteRule .* index.php?path=$0

и разбор пути на уровне php. Это гораздо более гибкий и прозрачный.

для уточнения, вот полная настройка

.htaccess

Options +FollowSymLinks

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php?path=$0 [QSA]

index.php

<code><pre>
<?php 
print_r($_GET);
?>

когда вызывается как www.example.com/foo/bar/baz?quux=123&blah=456 это печатает

Array
(
    [path] => foo/bar/baz
    [quux] => 123
    [blah] => 456
)

осталось только разобрать $ _GET ['path'] с помощью разнесения или регулярных выражений.

...