QUERY_STRING в .htaccess при перенаправлении - PullRequest
0 голосов
/ 02 октября 2010

Как разрешить посетителям использовать эту ссылку (www.example.com/news?id=34) для просмотра (www.example.com/index.php?page=news&id=34)

Прямо сейчас я скрываю расширения моих файлов PHP, чтобы ссылки выглядели хорошо. Когда посетители заходят на (www.example.com/news), они могут видеть страницу (www.example.com/index.php?page=news). Однако, когда они переходят на (www.example.com/news?id=12), они получают ошибку 404.

На данный момент PHP не распознает параметр id. Вот что у меня есть в моем файле .htaccess

Options +FollowSymlinks
RewriteEngine on

# catch request with no querystring like /Home
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]

# make other requests with a non-empty query string go to /index.php?id=XXXXX
RewriteCond %{QUERY_STRING} ^.*$
RewriteRule ^$ /index.php?id=$1 [QSA,L]

Ответы [ 2 ]

0 голосов
/ 02 октября 2010

Ваш второй тестовый шаблон (^$) соответствует только случаю, когда пользователь не вводит информацию о пути, но включает строку запроса (например, www.example.com /? Id = 12 ). Также обратите внимание, что обратная ссылка $1 также не имеет значения в этом правиле.

Самое простое решение - просто объединить два правила, так как вы можете использовать флаг QSA для добавления к вам части id=#:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ /index.php?page=$1 [QSA,L]
0 голосов
/ 02 октября 2010

Условие вашего первого правила не выполняется, так как запрос не пустой.Попробуйте это без этого условия, но со следующим условием:

RewriteCond $1 !=index.php
RewriteRule ^([^/]+)$ /index.php?page=$1 [L]
...