У меня есть сайт 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]
(по автору)