Как удалить имя папки из URL-адреса, не мешая ссылкам, таким как домашняя страница?

#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/ , но на главной странице отображается

403 Запрещено

Итак, каким должен быть .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 что я могу сделать сейчас, пожалуйста, скажите, что я сейчас ничего не могу понять