.htaccess https、www的一个重定向,控制器页面无尾随斜杠

eulz3vhy  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(154)

我试图强制所有的url到https,www,没有尾随斜杠,并最终将所有的请求定向到一个php控制器页面。服务器使用LiteSpeed。我已经尝试过了,但它似乎没有完全发挥预期的作用。它似乎处理尾随斜杠问题和https,但不是www。

# Turn on Rewrite Engine
RewriteEngine on

# Force a trailing slash except on files and directories that actually exist on server
RewriteCond %{REQUEST_URI} !(.+)/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://www.example.com/$1/ [R=301,L]

# Force HTTPS and WWW 
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [OR,NC]
RewriteCond %{HTTPS} off  
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# Redirect all requests to php controller except files and directories that actually exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

那么,我如何确保所有的请求都由我的控制器页面处理,并强制url为https,www,并添加尾随斜杠,并在一个重定向中完成?

yhived7q

yhived7q1#

虽然它有两个重定向。我希望它只做一个。
您可以使用此代码在单个规则和单个重定向中执行所有重定向:

RewriteEngine On

# add www, https, trailing slash
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^(.*?)/?$ https://www.%1/$1/ [R=301,L,NE]

# rewrite all requests to php controller
# except files and directories that actually exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [L]

请确保在测试此更改之前清除浏览器缓存。

1rhkuytd

1rhkuytd2#

@anubhava答案在我的网站上不起作用。它中断了到资源等的链接,但这只在一个重定向时起作用。

# Force www, https, trailing slash except on files and directories
RewriteCond %{REQUEST_URI} !(.+)/$ [OR,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [OR,NC]
RewriteCond %{HTTPS} off  
RewriteRule ^(.*)$ https://www.example.com/$1/ [R=301,L]

# Redirect all requests to php controller except files and directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

相关问题