RUDE

Скрыть имена параметров get из URL

Я знаю, что это можно сделать с помощью механизма перезаписи, но я не могу этого сделать Это мой файл .htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

У меня есть URL-адрес www.mysite.com/report?page=my-report-name

Теперь я хочу добиться этого: www.mysite.com/report/my-report-name

Файл, к которому я обращаюсь к этой странице имени переменной получения, - это reports.php, а его нет в моем корневом каталоге. Путь к моему файлу: root / themes / fount / intel / reports.php

Кто-нибудь может помочь?


1
1 750
3

Ответы:

Попробуйте этот код,

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /

# /anything/anything -> anything.php?url=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9_])/([^/]*)$ /$1.php?url=$2 [L]

</IfModule>

Если имя файла page.php всегда будет одинаковым, сделайте это так:

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /

# /page/anything -> page.php?url=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^page/([^/]*)$ /page.php?url=$1 [L]

</IfModule>

Спасибо!


Решено

Обновленный ответ

Чтобы добавить маршрутизацию, которая указывает на файл PHP внешнего обработчика, следует использовать следующий фрагмент:

function wprre_add_rewrite_rules() {
    global $wp_rewrite;

    // pattern with regexps
  $wp_rewrite->add_external_rule( '^wp_report/([\w\d-]+)/?', PATH_TO_THE_EXTERNAL_HANDLER.'report.php?report_name=$1' );
}
add_action('init', 'wprre_add_rewrite_rules');

Вы можете заметить одно различие в обработке параметров между add_external_rule () и add_rewrite_rule. Вы должны использовать селектор совпадений, поскольку в этом случае его использует Apache.

Этот фрагмент необходимо поместить в файл, который всегда загружается вашим плагином или темой. Если вы пишете плагин, он может быть основным файлом плагина. В случае разработки темы это может быть основной файл functions.php.

Регистрация настраиваемого параметра GET работает, как было упомянуто в исходном ответе.

ВАЖНЫЙ

После того, как вы отредактировали правила перезаписи с помощью кода (внешнего или внутреннего), вы должны перейти на страницу настроек постоянной ссылки в панели администратора и нажать кнопку «Сохранить» без каких-либо изменений. Это необходимо, потому что это сбросит правила перезаписи, и WP запишет правила в файл .htaccess.

Это причина, по которой я рекомендую вам подключиться к событию активации плагина и зарегистрировать правила перезаписи, а затем немедленно запустить команду flush_rewrite_rules ().

ПРИМЕЧАНИЯ

Проблема с исходным ответом заключалась в том, что функция add_rewrite_rule () работает только при переходе к базовому index.php по умолчанию. Вы можете только изменять параметры, но не можете направлять их во внешний файл.

Оригинальный ответ

Я думаю, для этого вам следует использовать WordPress API. Вам нужно будет добавить правило перезаписи и тег в своей теме или плагине с таким синтаксисом:

!! Отказ от ответственности, это работает только для перехода к базовому index.php !!

Для маршрутизации добавьте правило перезаписи, которое указывает на ваш файл PHP.

function custom_rewrite_basic() {
  add_rewrite_rule('^report/([\w-]+)/?', 'index.php?page=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');

Если вы хотите использовать параметр запроса, которого нет в стандартном списке параметров WP, вам необходимо добавить это имя настраиваемого параметра.

function custom_rewrite_tag() {
  add_rewrite_tag('%page%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);

Имейте в виду, что вы используете встроенные параметры, если вы не используете WP API.

В этой статье Кодекса вы найдете более подробную информацию по теме: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

Для устранения неполадок и более глубокого понимания вы можете также ознакомиться с этой статьей Кодекса, в которой описывается правильное использование правил перезаписи. Потому что в некоторых случаях вам нужно сбросить правила перезаписи (активация / деактивация плагина). https://codex.wordpress.org/Function_Reference/flush_rewrite_rules


Наконец, это решение сработало для меня Я добавил это в свой файл functions.php, который находится в папке нашей темы.

    function rewrite_photo_url(){
add_rewrite_rule('^report/([^/]*)/?','index.php?page_id=2671&value=$matches[1]','top');
}
function register_custom_query_vars($query_vars){
    $query_vars[] = 'value';
    return $query_vars;
}


add_action('init','rewrite_photo_url');
add_filter('query_vars','register_custom_query_vars');

А затем в моем файле php я использую get_query_var ('vale'), чтобы получить значение моего параметра