#apache #.htaccess #flask #mod-rewrite #url-rewriting
Вопрос:
Итак, я успешно развернул приложение Flask с использованием CGI. Чтобы приложение работало, мой файл .htaccess должен был выглядеть следующим образом:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /home/user/public_html/mysite/cgi-bin/main.cgi/$1 [L]
Однако я столкнулся с парой проблем.
- mysite.com работает, но когда я связываю другие страницы с домашней страницей, они переходят на mysite.com/cgi-bin/main.cgi. Я бы хотел, чтобы ссылки приводили пользователей на mysite.com. Аналогично, когда я пытаюсь перейти по ссылке на другую страницу, она переходит на mysite.com/cgi-bin/main.cgi/page2, когда я действительно хочу, чтобы это было mysite.com/page2. Как я могу это исправить?
- Следующий контент .htaccess, похоже, не работает:
RewriteCond %{HTTP_HOST} ^www.(. )$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Header always set Content-Security-Policy "upgrade-insecure-requests;"
Я не уверен, связаны ли эти две проблемы, но я хотел бы исправить обе.
Комментарии:
1. Не
it takes them to mysite.com/cgi-bin/main.cgi. I'd like for the links to take users to mysite.com. Similarly, when I try to link to another page, it goes to mysite.com/cgi-bin/main.cgi/page2, when I actually want it to be mysite.com/page2
могли бы вы, пожалуйста, более четко указать, на какую страницу вы переходите? И на какую страницу вы хотите перенаправить? Например: Вы нажимаетеhttp://localhost:80/test
и хотите, чтобы он перенаправился наhttp://localhost:80/testnew
etc?2. Я бью mysite.com/cgi-bin/main.cgi и я хочу перенаправить на просто mysite.com.
Ответ №1:
С показанными вами образцами, пожалуйста, попробуйте следовать Правилам. Пожалуйста, убедитесь, что ваш файл правил htaccess находится помимо вашего каталога/папки cgi-bin. Также очистите кэш вашего браузера перед проверкой ваших URL-адресов.
RewriteEngine ON
##Rules for applying https to urls.
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
##Rules to remove www from urls.
RewriteCond %{HTTP_HOST} ^(?:www.)?(.*)$ [NC]
RewriteRule ^ https://%1/%{REQUEST_URI} [NE,R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cgi-bin/main.cgi/page2/?$ cgi-bin/templates/page2/index.html [NC,L]
JS/CS переписать/перенаправить:
Возможно, вам потребуется использовать базовый тег для исправления js и других соответствующих ресурсов. Если вы связываете файлы js, используя относительный путь, то файл, очевидно, получит 404, потому что он ищет URL-путь. например, если путь к URL-адресу /file/ вместо file.html затем ваши относительные ресурсы загружаются из /file/, который не является каталогом, а переписанным html-файлом. Чтобы исправить это, сделайте ваши ссылки абсолютными или используйте базовый тег. В заголовке вашей веб-страницы добавьте это <base href="/">
, чтобы ваши относительные ссылки могли загружаться из правильного места.