Я пытаюсь удалить расширение .php и папку && вложенная папка из URL, если они существуют.
Случай 1
Входные данные:
127.0.0.1/project/folder/alfa.php
выход:
127.0.0.1/project/alfa
Дело 2
Входные данные:
127.0.0.1/project/folder/subfolder/beta.php
Выход:
127.0.0.1/project/beta
Вот что я получил до сих пор:
Удаление только расширения работает нормально, возникли проблемы с удалением папок
# Turn mod_rewrite on
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^((?! folder/).+?)/?$ folder/ [L,NC]RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
Пожалуйста посоветуй
Благодарю.
Вы можете иметь этот .htaccess внутри /project/
каталог:
RewriteEngine On
RewriteBase /project/
# rewrite to folder/subfolder/
RewriteCond %{DOCUMENT_ROOT}/project/folder/subfolder/$1.php -f
RewriteRule ^(.+?)/?$ folder/subfolder/$1.php [L]
# rewrite to folder/
RewriteCond %{DOCUMENT_ROOT}/project/folder/$1.php -f
RewriteRule ^(.+?)/?$ folder/$1.php [L]
Вы можете использовать следующее регулярное выражение для захвата обязательных полей из URL. Затем используйте полученные значения 1, 2 для генерации выходных данных.
([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\/[A-Za-z0-9]*).*(\/.*)\.php
Вы можете увидеть демонстрация Вот. Он захватывает адрес и родительскую папку в 1 и имя файла в 2.
Примечание: я посчитал адрес ipv4
На основании вашего разъяснения в вашем комментарии к вашему вопросу — это будет трудно решать динамически через RewriteRule
в одиночестве.
Учти это:
Как Apache узнал это? /project/beta
карты для /project/folder/subfolder/beta.php
в то время как /project/alfa
карты для /project/folder/alfa.php
?
Вы можете жестко закодировать это так:
RewriteRule ^project/beta/? /project/folder/subfolder/beta.php [QSA,L]
RewriteRule ^/project/alfa/? /project/folder/alfa.php [QSA,L]
Если это невозможно из-за большого количества правил, которые здесь потребуются, я попытаюсь решить это с помощью сценария. Что-то вроде этого:
Если запрашиваемый ресурс не является файлом или каталогом, отправьте его в скрипт. Затем пусть скрипт найдет целевую структуру каталогов, такую как /project
для всех файлов php, которые соответствуют второй части вашего замаскированного URL (часть альфа / бета). Если найден только один файл, необходимо запустить его.