Мой сайт с моей собственной платформой PHP позволяет иметь хорошие URL для страниц:
About Us => https://www.myurl.com/about
Contacts => https://www.myurl.com/contacts
Это работает хорошо в Бродячей локальной установке, но после того как я загружаю свой сайт на Apache2, идущий в те броски сайтов:
Требуемый URL / о не был найден на этом сервере
Требуемый URL / контакты не был найден на этом сервере.
Вероятно, потому что это - приоритет, должен искать файл в "приблизительно" и "связывается", папки вместо слушают /index.php
файл, который определяет маршруты и представления загрузок для приблизительно или страницы контакта.
Представление в https://www.myurl.com
домашняя страница работает отлично, проблема происходит, идя в страницы, объявленные в URI после https://www.myurl.com/.....
Это - мой .conf файл
ServerAdmin info@myurl.com
ServerName myurl.com
ServerAlias www.myurl.com
DocumentRoot /var/www/myurl.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.myurl.com [OR]
RewriteCond %{SERVER_NAME} =myurl.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
После добавления этих строк в мой .htaccess файл наконец работала маршрутизация:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Прежде, когда я шел в https://www.myurl.com/about
, это искало index.php файл в /var/www/myurl.com/public_html/about/
каталог.
С новым кодом в .htaccess, когда я перехожу в https://www.myurl.com/about
, .htaccess файл сначала располагает по приоритетам поиск представления, поскольку это определяется в index.php
файл и если это не загружает представления, это ищет каталог с именем.
У меня нет точной идеи, почему вышеупомянутая конфигурация работает над Бродягой, но не над собственным Apache. Мой опыт показывает мне, что, когда конфигурация Apache не достаточно строга, она работает иногда, и иногда она не работает. Особенно, когда Вы мигрировали от одного до версии другого Apache. Также несколько раз я читал, что желательно избегать использования, Переписывают правила, если это возможно.
Таким образом, я предпочел бы устанавливать свой виртуальный хост с отдельным конфигурационным файлом, который должен быть похожим на это:
ServerName myurl.com # Remove this line if there is another ServerName directive at the global level, or change it to 'ServerName localhost' if you want.
<VirtualHost *:80>
ServerName myurl.com
ServerAlias www.myurl.com
ServerAdmin info@myurl.com
ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log
CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined
# Redirect Requests to HTTPS
Redirect permanent "/" "https://myurl.com/"
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerName myurl.com
ServerAlias www.myurl.com
ServerAdmin info@myurl.com
ErrorLog ${APACHE_LOG_DIR}/myurl.com.error.log
CustomLog ${APACHE_LOG_DIR}/myurl.com.access.log combined
DocumentRoot /var/www/myurl.com/public_html
<Directory /var/www/myurl.com/public_html>
Options None FollowSymLinks
AllowOverride None
# Use 'AllowOverride All' to enable all .htaccess overrides
DirectoryIndex index.html index.php
Order allow,deny
Allow from all
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile /path/to/your/cert.file
SSLCertificateKeyFile /path/to/your/privkey.file
SSLCertificateChainFile /path/to/your/chain.file
</VirtualHost>
</IfModule>
Создайте новый конфигурационный файл: /etc/apache2/sites-available/myurl.com.conf
. Где необходимо вставить и изменить вышеупомянутые строки.
Отключите текущий конфигурационный файл. Вероятно, необходимо использовать a2dissite
. Затем включите новый конфигурационный файл: sudo a2ensite myurl.com.conf
. И Apache перезапуска. Я думаю, что это должно работать теперь.
Кроме того, в вышеупомянутом стенде конфигураций http://myurl.com
и http://www.myurl.com
перенаправит все запросы к https://myurl.com
. Однако адрес https://www.myurl.com
будет доступно, когда это будут требовать. Если Вы хотите перенаправления как их:
http://myurl.com
кому: https://myurl.com
и
http://www.myurl.com
кому: https://www.myurl.com
.
Необходимо удалить директиву ServerAlias
от <VirtualHost *:80>
определение и создает другой:
<VirtualHost *:80>
ServerName myurl.com
...
Redirect permanent "/" "https://myurl.com/"
</VirtualHost>
<VirtualHost *:80>
ServerName www.myurl.com
...
Redirect permanent "/" "https://www.myurl.com/"
</VirtualHost>
...