У меня есть сайт, созданный в WordPress, установленный в подкаталоге (назовем его «wp_dir»). Я следовал инструкциям в https://wordpress.org/support/article/giving-wordpress-its-own-directory/, а именно:
- изменить root htaccess файл
- изменить root индекс. php file
- изменить файл wp_dir htaccess
Хорошо работает, на рабочем столе, но не на мобильном. В десктопе сайт отображается хорошо: когда вы набираете «example.com», он хорошо отображает сайт WordPress, из WordPress, установленного в папке wp_dir, с SSL и всем остальным. Все ссылки меню работают хорошо.
Вместо этого в мобильном телефоне при вводе «example.com» URL-адрес меняется на «example.com/wp_dir» с SSL, и ссылки меню отображаются, но отображаются Ошибка 404 Ссылки работают.
Я считаю, что проблема связана с SSL. Я также попытался удалить директивы [L], чтобы инструкции продолжали выполняться, но безрезультатно. Что-то не работает нормально, или в неправильном порядке, но я не могу найти что.
Файл htaccess довольно сильно перепутан со многими различными инструкциями (SSL, не www redirection, разрешения для других подкаталогов для приложений управления, блочных эксплойтов и т. д. c). Сайт был ранее построен в Joomla. Очевидно, что я сделал что-то не так, но я не могу понять, что это такое.
Как это может хорошо работать, когда вы получаете доступ к нему на настольном компьютере, а не на мобильном телефоне?
Вот текущий htaccess в каталоге root (без беспорядка):
# SSL rewrite
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE]
RewriteBase /
RewriteEngine On
# non-www
RewriteBase /
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteCond %{HTTPS} OFF
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteCond %{HTTPS} ON
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wp_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wp_dir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ wp_dir/index.php [L]
</IfModule>
А вот htaccess в подкаталоге Wordpress ("wp_dir"):
# Force SSL
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
# 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
В случае, если полезно просмотреть полный файл htacess (с беспорядком), вот он:
# SSL rewrite
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE]
#RewriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteBase /
RewriteEngine On
## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.
## Allow access to 'gui' zone
RewriteRule ^(gui)($|/) - [L]
RewriteRule ^(gui/services)($|/) - [L]
RewriteRule ^(gui/services/api.php)($|/) - [L]
RewriteRule ^(gui/services/.*)($|/) - [L]
RewriteRule ^(gui/services/customers)($|/) - [L]
RewriteRule ^(gui/.*)($|/) - [L]
RewriteCond %{REQUEST_URI} ^/(gui|gui/.*)$
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_URI} ^/(gui/services|gui/services/.*)$
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_URI} ^/(gui/index.php|gui/index.php*/.*)$
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_URI} ^/(gui/services/customers|gui/services/customers/.*)$
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_URI} ^/(gui/services/customers)$
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_URI} ^/(gui/services)$
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_URI} ^/(gui/services/.*)$
RewriteRule ^.*$ - [L]
## End access to 'gui' zone
## Allow access to dir_zone2
RewriteCond %{REQUEST_URI} ^/(dir_zone2/|dir_zone2/.*)$
RewriteRule ^.*$ - [L]
# RewriteCond %{REQUEST_URI} !^/(gui|gui/.*)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
## Joomla SEF Section
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* wp_dir/index.php [L]
#
## End - Joomla! core SEF Section.
RewriteCond %{HTTP_REFERER} !^(http|https)://example.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^(http|https)://example.com$ [NC]
RewriteCond %{HTTP_REFERER} !^(http|https)://www.example.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^(http|https)://www.example.com$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp)$ - [F,NC]
# non-www
RewriteBase /
#RewriteCond %{REQUEST_URI} !^/(robots\.txt|favicon\.ico|sitemap\.xml)$
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
# 2017-03-06
RewriteCond %{HTTPS} OFF
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
#RewriteCond %{REQUEST_URI} !^/(robots\.txt|favicon\.ico|sitemap\.xml)$
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
# 2017-03-06
RewriteCond %{HTTPS} ON
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
# Wordpress
#RewriteCond %{REQUEST_URI} ^/(wp_dir/|wp_dir/.*)$
#RewriteRule ^.*$ - [L]
#RewriteCond %{HTTP_HOST} ^(www.)?example.com$
#RewriteRule ^(/)?$ wp_dir[L]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/wp_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wp_dir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ wp_dir/index.php [L]
</IfModule>
РЕДАКТИРОВАТЬ: добавлены заголовки
Это заголовки, полученные в двух разных браузерах ,
В Firefox я получаю 301, и URL остается на «http: // www.example.com».
Заголовки ответа:
HTTP/1.1 301 Moved Permanently
Server: Sucuri/Cloudproxy
Date: Thu, 05 Mar 2020 17:31:13 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 335
Connection: keep-alive
X-Sucuri-ID: 15020
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-Sucuri-Cache: HIT
Запрос заголовков :
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Это заголовки в Chrome, где я получаю 404 и URL "https: // www.example.com/wp_dir/":
Общее :
Request URL: https://www.example.com/wp_dir/
Request Method: GET
Status Code: 404
Remote Address: 192.124.249.120:443
Referrer Policy: no-referrer-when-downgrade
Заголовки ответов :
cache-control: no-cache, must-revalidate, max-age=0
content-encoding: gzip
content-length: 14112
content-security-policy: upgrade-insecure-requests;
content-type: text/html; charset=UTF-8
date: Thu, 05 Mar 2020 17:27:18 GMT
expires: Wed, 11 Jan 1984 05:00:00 GMT
link: <https://www.example.com/wp-json/>; rel="https://api.w.org/"
server: nginx
status: 404
vary: Accept-Encoding,User-Agent
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-sucuri-cache: EXPIRED
x-sucuri-id: 15020
x-xss-protection: 1; mode=block
Заголовки запросов :
:authority: www.example.com
:method: GET
:path: /wp_dir/
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: es-ES,es;q=0.9,ca;q=0.8,en;q=0.7,fr;q=0.6,ro;q=0.5,gl;q=0.4
cookie: pll_language=es; wp-settings-1=editor%3Dtinymce%26edit_element_vcUIPanelWidth%3D1379%26edit_element_vcUIPanelLeft%3D0px%26edit_element_vcUIPanelTop%3D74px%26libraryContent%3Dbrowse; wp-settings-time-1=1580451182; wordpress_test_cookie=WP+Cookie+check; _ga=GA1.2.2063032164.1566356615; __utma=98619150.2063032164.1566356615.1566523591.1566602595.2; d50c875bad7fd1a5e131e638c3965ba3=es-ES; pll_language=es; wordpress_test_cookie=WP+Cookie+check
sec-fetch-mode: navigate
sec-fetch-site: none
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36