Как вы можете игнорировать конец URL, используя mod_rewrite? - PullRequest
1 голос
/ 12 июля 2011

Я бы хотел структурировать свой сайт следующим образом:

domain.com/person/edit/1
domain.com/person/edit/2
domain.com/person/edit/3
etc.

У меня есть страница, на которую должны идти все эти запросы:

domain.com/person/edit.html

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

У меня есть это правило перезаписи:

RewriteRule ^person/view/(.*)$ person/view.html [L]

Я уверен, что упускаю что-то очевидное, но когда я посещаю одну из страниц выше, я получаю это сообщение 404:

The requested URL /person/view.html/1 was not found on this server.

Насколько я понял, [L] означает, что если это правило применяется, Apache должен прекратить переписывать и обслуживать альтернативную страницу. Вместо этого он, похоже, применяет правило как можно раньше, а затем добавляет оставшуюся часть непревзойденного URL к переписанному.

Как мне заставить эти перезаписи работать правильно?

1 Ответ

3 голосов
/ 12 июля 2011

"Насколько я понял, [L] означает, что если это правило применяется, Apache должен прекратить переписывать и открыть альтернативную страницу."

Хорошо .. [L] флаг указывает Apache прекратить проверку других правил ... и перезапись переходит к следующей итерации ... где он снова проверяет все правила снова (вот как это работает).

Попробуйте этот «рецепт» (поместите его где-нибудь поверх вашего .htaccess):

Options +FollowSymLinks -MultiViews

# activate rewrite engine
RewriteEngine On

# Do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

Еще одна идея - добавьте флаг DPI к вашему [L]: [L,DPI]


Если Options не поможет, то следует переписать правило. Но все зависит от конфигурации вашего Apache. Если вышеупомянутое не работает - пожалуйста, опубликуйте свой весь .htaccess (обновите свой вопрос).

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