Я пытаюсь выяснить, как изменить файл .htaccess, чтобы я мог сделать две вещи:
my.domain.com/page
карты для my.domain.com/page.php
).my.domain.com/page/path/stuff/here
карты для my.domain.com/page.php/path/stuff/here
).Я узнал, как сделать # 1, добавив в файл .htaccess следующее:
# Allow PHP files without ".php" extension.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/.]+)/?$ /$1.php [L,QSA]
Однако теперь я бы хотел изменить RewriteRule, чтобы он работал для # 2.
Хорошо, после поиска MultiViews я нашел несколько статей, предупреждающих против них (да, каждой из них свою), но это также привело меня к ответу, который использует 2 правила вместо 1:
RewriteRule ^([^\.]+)$ /$1.php [L]
RewriteRule ^([^\./]+)/(.*) /$1.php/$2 [L]
Первое правило ловит случай № 1 выше, а второе правило ловит случай № 2 выше. Вуаля!
Вы можете просто попытаться использовать Multiviews
, что сделано именно для этого:
Options +Multiviews
RewriteEngine On # Turn on the rewriting engine
RewriteRule ^([^\.]+)$ $1.php [NC,L] #Remove the .php
Не уверен, что вы хотите с путевым материалом, хотя.
Редактируйте на основе вашего комментария, я использовал что-то вроде этого с php / angular. Вероятно, это не «правильный» или лучший способ сделать это, но это сработало для меня.
Htaccess
RewriteEngine on
# Allow the API to function as a Front Controller
RewriteRule ^api/(.*)$ api/index.php?rt=$1 [L,QSA,NC]
# Allow Angular to have Pretty URL's
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
апи / index.php
// Pull the routing path
$router = explode('/', $_GET['rt']);
$version = $router[0];
$controller = $router[1];
$action = $router[2];
// Check for the file
if(file_exists($version . '/controllers/' . $controller .'.class.php')) {
include $version . '/controllers/' . $controller .'.class.php';
} else {
return false;
}
// Initialize and execute
$method = new $controller($action);
print $method->$action();
Это позволяет мне сделать что-то вроде: api / v1 / users / login в URL, затем найти файл users.class.php в папке V1 и запустить функцию login.