Почему не работает это правило перезаписи? - PullRequest
0 голосов
/ 14 июня 2009

Я использую следующий код в моем .htaccess:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

# Special rewrite rules
# ideas/<id>
RewriteRule ^ideas/([0-9]+)$ idea\?id=$1
# users/<name>
RewriteRule ^users/(.+)$ users\?name=$1

Идеи / правила работают, как я и ожидал, но пользователи / правила, похоже, не работают. Это дает мне ошибку HTTP 500, и журнал Apache сообщает, что превышено количество доступных перенаправлений:

[Вс 14 июня 10:58:39 2009] [ошибка] [клиент 127.0.0.1] Запрос превысил 10 внутренних перенаправлений из-за вероятной ошибки конфигурации. Используйте LimitInternalRecursion, чтобы увеличить лимит, если это необходимо. Используйте 'LogLevel debug', чтобы получить обратную трассировку. Referer: http://localhost/users

URL-адрес, на котором я тестирую это / users / ross, который должен работать нормально. / ideas / 1 определенно работает нормально.

Ответы [ 4 ]

1 голос
/ 14 июня 2009

Что может помочь вам отладить ситуацию, так это сделать перезаписи удаленными (например, заставить их отправлять HTTP-перенаправления). Таким образом, вы увидите, как запросы переписываются, что должно помочь вам решить проблему.

1 голос
/ 14 июня 2009

Правильно ли я предполагаю, что у вас есть файлы users.php и idea.php? Затем вы можете перенаправить к этому файлу напрямую, без необходимости повторного перезаписи. Итак, для этих двух правил:

RewriteRule ^ideas/([0-9]+)$ idea.php?id=$1
RewriteRule ^users/(.+)$ users.php?name=$1

(также: нет необходимости экранировать знак вопроса в результате)

Между прочим: почему users.php во множественном числе, а idea.php - нет? Как вы справляетесь с / ideas / abc и так далее?

1 голос
/ 14 июня 2009

Попробуйте в следующем порядке:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

RewriteRule ^ideas/([0-9]+)$ idea?id=$1
RewriteRule ^users/(.+)$ users?name=$1

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]
0 голосов
/ 14 июня 2009

Добавление а / до того, как файлы исправили это:

RewriteRule ^ideas/([0-9]+)$ ideas?id=$1
RewriteRule ^users/(.+)$ users?name=$1

до:

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