Я пытаюсь отправить все запросы //my.domain/download?id=xx
(будь то http или https) обрабатываться /path/to/my/download.php?id=xx
.
Я перепробовал все виды RewriteRule
правила бесполезны, поэтому нет смысла публиковать все, что у меня есть, но это Wordpress
install, поэтому это не должно противоречить существующим правилам WP, а именно:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Я был бы очень признателен за объяснение любого предоставленного ответа. Спасибо!
РЕДАКТИРОВАТЬ
Я уже посмотрел на Перенаправление, изменение URL-адресов или перенаправление HTTP на HTTPS в Apache - все, что вы когда-либо хотели знать о правилах Mod_Rewrite, но боялись спросить и, кажется, даже не могу точно определить, в каком разделе описана эта ситуация, поскольку все это слишком общее. Мне нужна помощь в этой конкретной ситуации.
РЕДАКТИРОВАТЬ 2
Это код, который дает ошибку 404, даже если https://htaccess.madewithlove.be/ говорит, что все будет хорошо:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^download
RewriteRule ^download(.*)$ wp-content/themes/XXX/inc/download.php$1
РЕДАКТИРОВАТЬ 3 У меня были не связанные с этим проблемы. Для всех, кто интересуется, см. Мой ответ ниже, чтобы узнать о сработавших правилах.
Я пытаюсь отправить все запросы
//my.domain/download?id=xx
(будь то http или https) обрабатываться/path/to/my/download.php?id=xx
.
Для этого вы, вероятно, захотите внутренне переписать URL, а не перенаправлять запрос извне, как в существующем ответе. Внутренняя перезапись не изменит URL-адрес в адресной строке браузера.
Директивы в вашем существующем ответе также можно упростить.
Вместо этого попробуйте следующее: перед существующие директивы WordPress, чтобы переписать любой запрос на /download?id=N
к /path/to/my/download.php?id=N
, где N
1 или более цифр.
RewriteCond %{QUERY_STRING} ^id=\d+$
RewriteRule ^download$ path/to/my/download.php [L]
\d
это сокращенный класс символов, который соответствует любой цифре. Такой же как [0-9]
. В +
квантификатор соответствует 1 или более цифры, поэтому это не удастся (404), если id=
(без значения) включается в строку запроса. Вернуться на *
если id=
должен быть успешным. Нет необходимости захватить это значение (т.е. заключите образец в круглые скобки, как в ([0-9]*)
поскольку вы не используете это в замена.
Строка запроса, т.е. id=N
копируется в замена по умолчанию.
Нет необходимости повторять RewriteEngine On
директиву, так как это уже часть блока кода WordPress.
Это код, который получил то, что просили работать:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/download$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^download(.*)$ path/to/my/download.php$1 [L,R]