Простой RewriteRule не работает как надо - PullRequest
0 голосов
/ 14 декабря 2011

В моем .htaccess файле записано следующее:

Options -Indexes

RewriteEngine on
RewriteBase /properties/
RewriteRule ^view/([0-9]+)$ view.php?id=$1 [QSA]

Я хочу написать "симпатичный" URL, например http://example.com/properties/view/1 в http://example.com/properties/view.php?id=1.

RewriteRule передает запрос моему скрипту view.php, но, похоже, он не выполняет бит строки запроса.Например, если я делаю print_r($_SERVER), я вижу следующее:

Array
(
    ...
    [DOCUMENT_ROOT] => /Users/Martin/Sites/[removed]/
    ...
    [SCRIPT_FILENAME] => /Users/Martin/Sites/[removed]/properties/view.php
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /properties/view/1
    [SCRIPT_NAME] => /properties/view.php
    [PATH_INFO] => /1
    [PATH_TRANSLATED] => /Users/Martin/Sites/[removed]/1
    [PHP_SELF] => /properties/view.php/1
    ...
)

Почему QUERY_STRING пусто?И почему я не могу получить доступ к «1» с $_GET['id']?

Примечание: Очевидно, я поместил токены [removed] в пути к файлам.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Вы переписываете только те URL, которые начинаются с view, используя:

^view/([0-9]+)$

, потому что ^ означает привязку к началу.

Вы можете изменить его, например:

^properties/view/([0-9]+)$
0 голосов
/ 14 декабря 2011

Мне не кажется, что твое правило перезаписи работает.В противном случае я думаю, что будут конвертированы следующие значения:

[REQUEST_URI] => /properties/view/1
[PHP_SELF] => /properties/view.php/1

Если бы правило перезаписи работало, ваш скрипт php увидел бы переписанный URI.1007 * Какая у вас RewriteCond?Это совпадение?

Я никогда не пытался сопоставить частичный путь, не пытаясь хотя бы использовать. * Для сопоставления с самого начала.Что если вы попробовали одно из следующего?

RewriteRule ^/?properties/view/([0-9]+)$ /properties/view.php?id=$1 [NC,L]
RewriteRule ^.*/view/([0-9]+)$ /properties/view.php?id=$1 [NC,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...