.htaccess пытается скрыть подкаталог - одно решение работает, другое - теперь, почему? - PullRequest
1 голос
/ 30 января 2020

Я скрываю подпапку в URL для веб-сайта

было:

https://www.example.com/sub-folder/index.php

хочу:

https://www.example.com/index.php

В «подпапке» есть это следующее в .htaccess, одно работает, а другое нет, и я не понимаю, почему.

это работает:

RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ [NC]
RewriteCond %{THE_REQUEST} /sub-folder/(\S*)\s [NC]
RewriteRule ^ /%1 [R=301,NC,NE,L]  

Это НЕ работает:

RewriteCond %{REQUEST_URI} ^/sub-folder/ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ [NC]
RewriteRule ^sub-folder/(.*)$ /$1 [R=301,NC,NE,L]

Последнее представляется правильным. Я признаю это! Я скопировал это последнее из другого решения stackoverflow, которое, казалось, работало. Согласно https://htaccess.madewithlove.be последний дает правильный результат, но на практике он не работает.

У меня есть рабочее решение с первым, но я не понимаю, почему последнее не помогает. Может кто-нибудь объяснить мне это?

Заранее спасибо!

1 Ответ

1 голос
/ 30 января 2020

Согласно ... последний дает правильный результат, но на практике он не работает.

Поскольку этот инструмент тестирования предполагает ваш .htaccess файл находится в документе root, а не в /sub-folder.

RewriteRule ^sub-folder/(.*)$ /$1 [R=301,NC,NE,L]

Это правило никогда не будет совпадать, если файл .htaccess находится внутри самого /sub-folder, потому что URL-путь, с которым сопоставляется шаблон RewriteRule , меньше префикса каталога. Каталог-префикс - это путь к файловой системе, в котором находится файл .htaccess (включая завершающий sla sh).

Итак, когда вы запрашиваете /sub-folder/foo/bar шаблон RewriteRule в /sub-folder/.htaccess соответствует foo/bar (запрошенный URL-путь, за вычетом префикса каталога).

Принимая во внимание, что при запросе /sub-folder/foo/bar шаблон RewriteRule в /.htaccess совпадает с sub-folder/foo/bar (запрошенный URL-путь за вычетом префикса каталога).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...