我正在尝试重定向论坛索引以对所有内容都使用HTTPS,但是.htaccess对我来说还很新,我正在学习,所以任何人都可以伸出援手,我将不胜感激:)
因此,我在名为SMF的子目录中拥有该论坛。目前,所有内容都将转到www.website.net/smf/index.php
但是我想将所有内容重定向到HTTPS,同时保持/smf/index.php结构。
这是我在主html_public中拥有的当前.htaccess:
# .htaccess main domain to subdirectory redirect
# Do not change this line.
RewriteEngine on
# Change example.com to be your main domain.
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteCond %{REQUEST_URI} !^/subdirectory/
# Don't change the following two lines.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Change 'subdirectory' to be the directory you will use for your main domain.
RewriteRule ^(.*)$ /subdirectory/$1
# Change example.com to be your main domain again.
# Change 'subdirectory' to be the directory you will use for your main domain
# followed by / then the main file for your site, index.php, index.html, etc.
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ subdirectory/index.php [L]
当我进行任何更改时,所有内容都会变成香蕉。论坛中的所有内容都在子目录文件夹中,包括index.php等。 (请注意,我将网站网址更改为example.com,并将其子目录更改为仅在复制粘贴代码中的子目录)
我要尝试使网站显示https的香蕉,但是每当我尝试执行某些操作时,它都无法正常工作并给我https://www.website.com//smf/index.php,并且我无法删除//:(
反正我还能清理代码并使代码更简单易懂吗?
谢谢!
答案 0 :(得分:0)
我在.htaccess文件中度过了很多夜晚。但是,至此,这个文件实际上与php无关,但实际上与Apache相关。这是一个独立于PHP的程序(它本身就是一种编程语言和编译器)。而不是开始大量的切线,但这意味着您可以在没有浏览器的终端中运行php。任何麻烦,因为Apache并不是用PHP编程的,并且仅是为了处理HTTP服务器的请求而要求一些代码使其工作,这可能取决于操作系统。当在本地运行并尝试部署到我的远程服务器时,这是很多努力的原因。这些都是我的经验,因此,如果有人知道更多,请随时分享。
这就是我现在用来发送到https的内容。
# Remove www.
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
但是我也曾经使用过这些变体。
#Turn on https ( Cent OS )
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Turn on https ( Mac OS )
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
我建议您出于可移植性,直接在php中自行实现此功能。
您可以使用以下类似方法检测https,这将设置一个名为“ HTTPS”的全局常量布尔值
\define('HTTPS', ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? false) === 'https' || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');
这是php 7代码
然后,如果它为假,您将重定向您认为合适的方式。
答案 1 :(得分:0)
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=307,L,NC]
## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_FILENAME}.html [L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
#ErrorDocument 404 /404.php
#ErrorDocument 403 /403.php
Options -Indexes