#html #.htaccess #server #url-rewriting #filepath
#HTML #.htaccess #сервер #url-переписывание #путь к файлу
Вопрос:
Примечание: домен не подключен к сети, он создан в localhost
Вот сложная проблема, с которой я сейчас сталкиваюсь в своем проекте, заключается в том, что я хочу удалить имя папки из URL-адреса из
http://www.example.com/pages/contact-us
Для
http://www.example.com/contact-us
Следовательно, удаление /pages/
в этом случае —
Теперь, чтобы получить доступ к файлам, мы должны сначала получить доступ к pages
then contact-us
, поэтому, чтобы удалить это, я использовал этот .htaccess
код ниже —
Options FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1.php [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s/ pages/([^s] ) [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^pages/)^(.*)$ /pages/$1 [L,NC]
Когда я использую это, доступ к URL-адресам можно получить без использования /pages/
, но на главной странице отображается
Итак, каким должен быть .htaccess
код, чтобы открыть домашнюю страницу без каких-либо ошибок, а также, пожалуйста, укажите, убьет ли это мой SEO и как это исправить?
Пожалуйста, обратите внимание, если мне нужно рассказать вам больше, я добавил эти коды в файл .htaccess перед добавлением приведенного выше кода, и он отлично работал…
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html [NC,L]
Options -Indexes
php_value display_errors 1
AddHandler application/x-httpd-php .html .htm
Комментарии:
1. Из какого файла вы ожидаете, что он будет отправлен
/pages/
?2. @MrWhite Я хочу, чтобы URL-адрес был hostedtools.com/contact-us от hostedtools.com/pages/contact-us поскольку все файлы находятся в папке pages
3. Да, но как насчет «домашней страницы» (что приводит к 403). Вы запрашиваете
/
, который предположительно переписывается в/pages/
— какой файл вы ожидаете получить отсюда ?index.php
?index.html
? Что-то еще?4. @MrWhite Да, это проблема с этим кодом, есть ли в этом коде какие-либо улучшения, чтобы предотвратить это или новую замену для этого.
5. Но какой файл вы ожидаете получить при запросе домашней страницы, как обрабатывается этот запрос? Я полагаю, что под «домашней страницей» вы подразумеваете запрос формы
http://example.com/
? Если у вас нетDirectoryIndex
документа в/pages/
каталоге, вы действительно получите ответ 403. Я бы предположил, что у вас должно быть, но это неясно из вашего вопроса, и нам нужно исключить очевидное. У вас также естьindex.html
файл в корне документа, который может показаться избыточным?
Ответ №1:
Было бы проще, если бы все страницы (включая домашнюю страницу) обслуживались из /pages/
подкаталога (что в настоящее время предполагает ваш код).
(В сторону: на самом деле вы не включили содержимое своего /pages
подкаталога в свою файловую структуру, но если этот подкаталог не содержит документа с индексом каталога, например. index.php
или index.html
(в зависимости от значения DirectoryIndex
директивы), тогда вы действительно получите 403 запрещенный ответ. То же самое, что запрашивать любой каталог без документа с индексом каталога.)
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (?!^pages/)^(.*)$ /pages/$1 [L,NC]
Однако, если предполагается, что ваша домашняя страница обслуживается из фактического корня документа, а не перезаписывается в /pages
подкаталог (как и все другие URL-адреса), вам нужно будет включить исключение в приведенный выше блок правил. Например:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/$
RewriteRule (?!^pages/)^(.*)$ /pages/$1 [L,NC]
Чтобы предотвратить внутреннюю перезапись запросов на /
(корень документа) /pages/
.
ИЛИ сделайте исключение для всех каталогов (корень документа также является каталогом). Например:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (?!^pages/)^(.*)$ /pages/$1 [L,NC]
ИЛИ переместите свою домашнюю страницу ( index.html
) в /pages
подкаталог.
Комментарии:
1. Спасибо @MrWhite, когда я применил ваш код к файлу .htaccess (который находится внутри папки pages), он действительно работал очень хорошо
2. Извините, но ответ сначала не сработал, он снова сработал, он не сработал
3. Объект не найден! Запрошенный URL-адрес не был найден на этом сервере. Ссылка на ссылочной странице кажется неверной или устаревшей. Пожалуйста, сообщите автору этой страницы об ошибке. Если вы считаете, что это ошибка сервера, пожалуйста, свяжитесь с веб-мастером. Ошибка 404
4. Какой URL-адрес вы запрашиваете? И какой путь к файловой системе, на который вы ожидаете, что запрос будет перезаписан?
5. Сначала я запрашиваю домашнюю страницу, а затем, когда я запрашиваю homepage/about-us.html это говорит о том, что объект не найден в example.com/about-us.html ошибка 404 что я могу сделать сейчас, пожалуйста, скажите, что я сейчас ничего не могу понять