apache2 重写规则:从 URL 中删除任何路径

apache2 重写规则:从 URL 中删除任何路径

我对重写规则感到疯狂阿帕奇

基本上我想要实现的是重写任何 URL,例如:

http[s]://www.example.com/something

https://www.example.com

我在 apache 上有一个 VHost,如下所示:

<VirtualHost *:80>
ServerName example.com
ServerAlias example
DocumentRoot /var/www/html/example_courtesy
ServerAdmin [email protected]

RedirectMatch 404 /\.git
RedirectMatch 404 /\.svn
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/html/example_courtesy>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Require all granted
    DirectoryIndex index.php indice.htm
</Directory>

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]


</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
ServerAlias example
DocumentRoot /var/www/html/example_courtesy
ServerAdmin [email protected]

RedirectMatch 404 /\.git
RedirectMatch 404 /\.svn

[...]

我尝试从第一条规则中删除 [L],并在 *:443 VirtualHost 中添加如下重写规则:

 RewriteEngine on
 RewriteCond %{SERVER_PORT} !^80$
 RewriteRule ^.*$ https://%{SERVER_NAME} [L,R]

我收到的是一个重写循环,Firefox 告诉我“该页面未正确重定向”。

我尝试了很多次重写规则,但是都没有成功。

我只能重写特定的 URL,例如https://www.example.com/specific-pathhttps://www.example.com重定向匹配,但这不是我真正想要的。

有什么建议么?

我在这里搜索了类似的问题,但没有找到针对我的特定问题的解决方案。

答案1

您对 *.443 部分的 RewriteCond 存在明显问题。HTTPS(通常)在端口 443 上运行(如 VirtualHost 配置所示),但您的重写条件显示“如果服务器端口不是 80,则重定向到 https://...”。

因此,点击端口 443,请求内容,被告知转到 443,因为您不在 80 上。这是一个循环。 RewriteCond %{SERVER_PORT} !^443$应该可以工作。

就我个人而言,我宁愿使用RewriteCond %{HTTPS} !=on

相关内容