我有一个网站,其中所有网址都被重写,以避免看到扩展名和原始文件名。所以,在我的htaccess中,我有以下内容:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^example-1$ filename_1.php
RewriteRule ^example-2$ filename_2.php
现在,我还有一些页面,我想只是https而且只有http。所以,让我们说我希望filename_1始终为https,filename_2始终为http。所以,我有以下代码。
RewriteCond %{HTTPS} off
RewriteRule ^(filename_1)\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R]
和
RewriteCond %{HTTPS} on
RewriteRule ^(filename_2))\.php$ http://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R]
这只是一个例子,但我确实有很多文件受这两条规则的影响。
现在,我觉得它工作得很好,直到我注意到当我在https页面上访问非https页面时,url会更改以显示实际的文件名。因此,如果我在https://www.mywebsite.com/example-1并且我尝试访问示例2,则网址将更改为http://www.mywebsite.com/filename_2.php而不是http://www.mywebsite.com/example-2。从http到https也一样。 (我在这些例子中保持简单,但问题只出现在网址中包含变量的页面。像www.mywebpage.com/homepage这样的简单工作就好了。)
所以,我添加了这行代码:
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/(example-2)/ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301,NE]
所以,它从https到http工作,但事情就变得疯狂了!我在某些https和非https页面获得重定向循环,我不知道为什么!问题是我开始一次添加一个页面到这个新规则。我还没有添加的页面给了我一些重定向循环。然后我尝试添加这些页面而不是https,我使用https关闭它甚至更疯狂。
所以我的问题是让所有以下内容和谐地表现出来的好方法: 1.将所有网址重写为自定义网址 2.拥有http和https页面,同时保留自定义URL并避免所有重定向循环。
谢谢!