Назад | Перейти на главную страницу

Использование .htaccess, чтобы скрыть расположение и расширение файла .php

Я пытаюсь отправить все запросы //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]