Мой сайт с моей собственной фреймворком PHP позволяет иметь хорошие URL-адреса для страниц:
About Us => https://www.myurl.com/about
Contacts => https://www.myurl.com/contacts
Он хорошо работает в локальной настройке Vagrant, но как только я загружу свой сайт в Apache2, вы попадаете на эти сайты:
Запрошенный URL-адрес не найден на этом сервере Запрошенный URL-адрес / контакты не найден на этом сервере.Возможно, потому что приоритетом является поиск файла внутри папок «about» и «contacts» вместо прослушивания файла /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, и если он не загружает view, он ищет каталог с заданным именем.
После добавления этих строк в мой .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, и если он не загружает view, он ищет каталог с заданным именем.
после добавления этих строк к моему .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/.
с новый код .реврайт, когда я иду https://www.myurl.com/about на .файл htaccess сначала отдает приоритет поиску посмотреть, как это определено в файле index.php и если он не загружается в любом виде, он ищет каталог с заданным именем.
У меня нет точной идеи, почему эта конфигурация работает на Vagrant, но не на родном Apache. Мой опыт показывает мне, что, когда конфигурация Apache не является достаточно строгой, она работает иногда, а иногда она не работает. Особенно, когда вы перешли от одной версии к другой версии Apache. Также несколько раз я читал, что лучше избегать использования правил перезаписи, если это возможно.
Поэтому я бы предпочел настроить мой виртуальный хост с отдельным конфигурационным файлом, который должен выглядеть так: [ ! d1]
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>
...
У меня нет точной идеи, почему эта конфигурация работает на Vagrant, но не на родном Apache. Мой опыт показывает мне, что, когда конфигурация Apache не является достаточно строгой, она работает иногда, а иногда она не работает. Особенно, когда вы перешли от одной версии к другой версии Apache. Также несколько раз я читал, что лучше избегать использования правил перезаписи, если это возможно.
Поэтому я бы предпочел настроить мой виртуальный хост с отдельным конфигурационным файлом, который должен выглядеть так: [ ! d1] 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>
...
у меня нет точного понятия, почему данная конфигурация работает на бродягу, а не на родной Апач. Мой опыт показывает мне, что если конфигурация Апача не достаточно строга, она иногда работает а иногда не работает. Особенно когда вы мигрировали с одного на другой сервера 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. Однако адрес [F9] и будут доступны при запросе. Если вы хотите избавиться как эти:
[F10] для того, чтобы на [F11] и [F12] для [от f13].Вы должны удалить директивы 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>
...