У меня есть следующий URL www.example.com/advice/
теперь обратите внимание на косую черту в конце URL-адреса? Я бы хотел, чтобы это было удалено, чтобы было что-то вроде www.example.com/advice
. Теперь, когда я ввожу этот URL-адрес в браузере, меня перенаправляют на конечную косую черту, даже, например, с помощью curl. Теперь я знаю, что добавляется косая черта, потому что advice - это настоящий каталог.
[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice -k
HTTP/1.1 301 Moved Permanently
Date: Fri, 25 Nov 2016 08:20:11 GMT
Server: Apache/2.4.6 (CentOS)
Location: https://dev.www.example.com/advice/
Cache-Control: max-age=0
Expires: Fri, 25 Nov 2016 08:20:11 GMT
Connection: close
Content-Type: text/html; charset=iso-8859-1
[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice/ -k
HTTP/1.1 200 OK
Date: Fri, 25 Nov 2016 08:21:19 GMT
Server: Apache/2.4.6 (CentOS)
X-Powered-By: PHP/5.6.27
Set-Cookie: flarum_session=mfbou2hcbvcobhncnaqlvl9bm7; Path=/; HttpOnly
X-CSRF-Token: WV69M1oi8POqOcXi6MvwKhbJQ72Tmo2WpFn3oxwq
Content-Length: 10339
Cache-Control: max-age=0
Expires: Fri, 25 Nov 2016 08:21:19 GMT
Vary: Accept-Encoding
Access-Control-Allow-Origin: *.example.com
Connection: close
Content-Type: text/html; charset=UTF-8
Внутри .htacess я пробовал:
DirectorySlash Off
В результате получилось 403 без косой черты.
[steve@dev dev.www.example.com]$ curl -I https://dev.www.example.com/advice -k
HTTP/1.1 403 Forbidden
Date: Fri, 25 Nov 2016 08:53:15 GMT
Server: Apache/2.4.6 (CentOS)
Connection: close
Content-Type: text/html; charset=iso-8859-1
Я также добавил следующее правило перезаписи, но ничего не изменилось
RewriteRule ^.*(advice)\/$ $1 [L,R=301]
Сейчас advice
это место, где у меня установлена платформа форума, в том же каталоге у меня установлена CMS, что-то вроде ниже
├── advice
│ ├── admin.php
│ ├── api.php
│ ├── assets
│ ├── composer.json
│ ├── composer.lock
│ ├── config.php
│ ├── CONTRIBUTING.md
│ ├── index.php <-- Forum entry point
│ ├── LICENSE
│ ├── Procfile
│ ├── readme.md
│ ├── scripts
│ ├── storage
│ ├── Vagrantfile
│ └── vendor
├── assets
├── cms
├── codeception.yml
├── commands
├── composer.json
├── composer.lock
├── crontask
├── dropzone
├── email-helpers
├── favicon.ico
├── framework
├── gridfield-bulk-editing-tools
├── gridfieldextensions
├── index.php <-- CMS Entry point
├── kickassets
├── liveseo
├── minify
├── README.md
├── reports
├── setup.php
├── shortcodable
├── silverstripe-cache
├── siteconfig
├── _ss_environment.php
├── tests
├── themes
├── trait-loader
├── vendor
└── web.config
Версия Apache Apache/2.4.6 (CentOS)
Вы можете найти совет .htaccess
Вот и тот, что в cms Вот
Если это поможет, CMS серебряная полоска и форум Flarum
Если вы удалите косую черту в каталоге и по-прежнему ожидаете, что документ индекса каталога (в этом каталоге) будет возвращен, вам необходимо вручную «исправить» URL, внутренне переписав его в документ индекса. (Вам в основном нужно повторить то, что вы отменили, повернув DirectorySlash Off
.)
Попробуйте сделать что-то вроде следующего перед другими директивами mod_rewrite в корне .htaccess
файл:
DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule (.*) $1/index.php [L]
Для всех запросов о физических каталогах, которые не заканчиваются косой чертой, где index.php
существует в этом каталоге, а затем внутренне переписать на index.php
.
В качестве альтернативы вы можете просто добавить завершающую косую черту (путем внутренней перезаписи), а затем разрешить mod_dir выдавать подзапрос в DirectoryIndex
. Например:
RewriteRule (.*) $1/ [L]
Если у вас есть DirectoryIndex
set (который у вас, вероятно, есть, если он работал ранее), тогда mod_dir внутренне перезапишет запрос (строго подзапрос) из /advice/
к /advice/index.php
. Однако теперь это двухэтапный процесс, поэтому вы можете сделать это все за один с помощью mod_rewrite (если у вас нет других документов индекса каталогов).
Вышесказанное является общим случаем для всех каталогов. Вы могли бы быть более конкретными и проверять только соответствующий каталог / URL:
RewriteRule ^advice$ advice/index.php [L]
Если запрос для /advice
затем внутренне переписать на /advice/index.php
- это не проверяет, является ли это каталогом, это просто предполагается.