.htaccess PHP - предотвращение перезаписи, когда вводится только домен

0

У меня есть сайт, расположенный по адресу

application
  controllers
  views
  ...
  public <- the root of the site
    index.php <- entry point
    css
    ...

Таким образом, URL-адрес: http://localhost/application/public. Я хотел бы, когда пользователь вводит только http://localhost/application/public ничего не делать, кроме вызова index.php, не показывая его.

Вот некоторые примеры:

http://localhost/application/publichttp://localhost/application/public или http://localhost/application/public/

НО

http://localhost/application/public/asdf → Переписать внутренне по http://localhost/application/public/index.php и показать только http://localhost/application/public/asdf

Я написал файл.htaccess. Единственная проблема заключается в том, что при вводе http://localhost/application/public открывается http://localhost/application/public/index.php вместо http://localhost/application/public

Еще одна вещь - я хочу, чтобы существующие каталоги были переписаны, поэтому только существующие файлы не следует переписывать в index.php. Поэтому в основном http://localhost/application/public/css следует переписать на index.php. Причина, по которой я хочу это, - опустить ошибку Forbidden 403 и любезно сообщить пользователю, что путь не существует.

HTAccess

Options +FollowSymLinks -MultiViews -Indexes
RewriteEngine On
RewriteBase /application/public/

#Remove trailing slash
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ $1 [R=301,L]

#Do the rewriting
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [NC,L]

Причина, по которой я устанавливаю RewriteCond %{REQUEST_FILENAME} !-d - это запретить переписывание http://localhost/application/public. Если http://localhost/application/public переписывается, он загружает http://localhost/application/public/index.php

На самом деле, я знаю, что необходимы некоторые изменения в RewriteCond %{REQUEST_FILENAME} !-d. Я хочу, чтобы корневая, общая папка не переписывалась, это должно быть единственным исключением. Все остальные физические папки, такие как css, js, должны быть перезаписаны, как и не существующие. Файлы не следует переписывать. Благодарю!

Теги:
.htaccess
mod-rewrite
url-rewriting

1 ответ

1

Хорошо, я думаю, что нашел решение.

Options +FollowSymLinks -MultiViews -Indexes
RewriteEngine On
RewriteBase /application/public/

RewriteRule ^(css/?|js/?)$ index.php [NC,L] <- Folders css, js will be rewritten, but root directory won't be rewritten. Files inside them also won't be rewritten.

#Remove trailing slash
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ $1 [R=301,L]

#Do the rewriting
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [NC,L]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню