mod_rewrite заменить ключ строки запроса - PullRequest
0 голосов
/ 10 февраля 2011

Короче говоря, я пытаюсь изменить указанный URL:

http://mydomain.com/category/title/attachment/randomstring_?resolution=320x480

С

http://mydomain.com/category/title/attachment/randomstring_320x480

По сути, удаление ?resolution= из строки запроса и добавление значенияк пути.

Значения категорий, заголовков и случайных строк являются динамическими, но их расположение всегда должно быть одинаковым.

Не знаю, имеет ли это значение, но это используетсяв WordPress.

Я попробовал следующее, но я просто получаю 404:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} ^resolution=([0-9]{3,4}x[0-9]{3,4})$
RewriteRule ^$ ${REQUEST_URI}%1/? [R]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

любая помощь приветствуется;)

1 Ответ

1 голос
/ 10 февраля 2011

Что ж, после долгих проб и ошибок (и чтения выходных данных RewriteLog), я наконец-то начал работать со следующим:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

RewriteCond %{QUERY_STRING} ^resolution=(.*)$
RewriteRule . %{REQUEST_URI}%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Ключевые проблемы с оригинальным решением:

  • Использование ^$ вместо . в RewriteRule
  • Использование /? вместо ? в RewriteRule
  • Не включая ,L в флагах RewriteRule

Для всех, кому любопытно, включение ? в RewriteRule предотвращает сохранение QUERY_STRING в запросе.

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