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

Строка запроса URL-адреса приводит к нарушению макета

У меня есть сайт Wordpress на основе сервера Apache, который переписывает URL-адреса, чтобы они были "красивыми".

Когда я включаю параметр запроса в URL-адрес, сайт ломается.

Так:

http://mysite.com

работает нормально, но:

http://mysite.com/?anything

Не ... загружает содержимое страницы, но не может загрузить некоторые плагины, которые я использую на домашней странице.

Если вы можете объяснить, почему это происходит, я хотел бы это услышать. В противном случае я просто хотел бы полностью отключить параметры запроса, чтобы запрос:

http://mysite.com/?anything

будет вести себя так же, как запрос:

http://mysite.com

Либо путем перенаправления, либо путем простого удаления строки запроса.

Вот мой текущий .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Handle redirection from https to http
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
# End https to http redirection

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

</IfModule>

# END WordPress

Привет, @Lothar_Grimpsenbacher,

Так что я думаю, что это может быть не проблема .htaccess, а может быть концепция пропуска WordPress. Я постараюсь кратко объяснить;

В WordPress есть некоторые query_vars, которые поступают из переменных, и если у вас активированы "красивые" постоянные ссылки (похоже, что вы делаете это из правил вашего .htaccess), проблема будет в том, что ?anything является параметром GET, который не ожидается, поэтому WordPress может подумать, что это случай 404 в зависимости от того, какие переменные.

Насколько я могу судить, я бы не стал связываться с файлами .htaccess только для решения этой простой проблемы, в дальнейшем это может вызвать серьезные проблемы.

Я думаю, что решение вашей проблемы заключается в том, что WordPress смог увидеть, что переданная переменная действительна, проверьте решение ниже:

function prefix_add_query_vars() {
    global $wp;
    $wp->add_query_var('anything');
}

add_filter('init', 'prefix_add_query_vars');

И на странице вашего шаблона вы можете проверить значение следующим образом:

if ( get_query_var('anything') ) {
    //do your stuff
}

PS: Я плохо разбираюсь в правилах файла .htaccess ...

Поскольку я сам ответил на этот вопрос, а затем он был исключен из моего вопроса, я введу его как «собственный ответ».

Добавление ниже решило мою проблему:

RewriteCond %{THE_REQUEST} \?[^\ ]+
RewriteRule (.*) /$1? [R=301,L]
RewriteCond %{THE_REQUEST} \?[^\ ]+
RewriteRule (.*) /$1? [R=301,L]

(по автору)