【问题标题】:Mask URL rewrite in htaccess在 htaccess 中掩码 URL 重写
【发布时间】:2021-05-21 12:13:05
【问题描述】:

我在项目中有一个 wordpress 网站,我想屏蔽所有页面的 URL,以便在访问它们时:

https://myweb.com/survey/page1

https://myweb.com/survey/page2

....

显示为:

https://myweb.com/survey/portal

我在 .htaccess 上有这个,但它不起作用:

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /survey/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /survey/index.php [L]
RewriteRule ^survey/?$ /survey/portal/

感谢大家的宝贵时间。

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite url-rewriting


    【解决方案1】:

    首先非常好的努力,请您尝试关注;根据您显示的示例编写。请在测试您的 URL 之前清除您的浏览器缓存。

    还请您的 .htaccess 文件仅比 survey 文件夹高一级。

    RewriteEngine On
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteBase /survey/
    RewriteRule ^index\.php$ - [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ https://%{HTTP_HOST}/portal [R=301]
    RewriteRule ^ survey/index.php [L]
    

    【讨论】:

    • @Loco,您好,如果我的回答对您有所帮助,请告诉我?谢谢。
    【解决方案2】:

    有一个常见的误解,即重写规则会使丑陋的 URL 变得漂亮;更正确的说法是它们使外部漂亮的 URL 在内部变得丑陋

    这是因为当浏览器发送请求网络服务器时,网络服务器可以决定响应服务,但它不能改变浏览器发送的内容- 这已经发生了。

    因此,如果您在 Web 浏览器中键入 https://myweb.com/survey/portal,则发送到服务器 myweb.com 的 URL 将是 /survey/portal。您的重写规则决定接收该 URL 时要做什么,因此您的规则可能如下所示:

    RewriteRule ^survey/portal$ survey/index.php
    

    左边是浏览器发送的 URL;右边是服务。但请注意,这样写是没有意义的:

    RewriteRule ^survey/portal$ survey/page1.php
    RewriteRule ^survey/portal$ survey/page2.php
    RewriteRule ^survey/portal$ survey/page3.php
    

    这些都匹配同一个 URL,而这个 URL 就是我们所要做的,所以 没有办法使用这种机制将一个 URL 映射到多个页面。您需要在其他地方了解用户所在调查的哪个页面。

    您当然可以做相反的事情 - 将浏览器中的多个 URL 匹配到内部的同一资源:

    RewriteRule ^survey/page1$ survey/index.php
    RewriteRule ^survey/page2$ survey/index.php
    RewriteRule ^survey/page3$ survey/index.php
    

    或者您可以将它们映射到稍微不同的资源:

    RewriteRule ^survey/page1$ survey/index.php?page=1
    RewriteRule ^survey/page2$ survey/index.php?page=2
    RewriteRule ^survey/page3$ survey/index.php?page=3
    

    您可以使用模式和占位符来避免列出所有可能性,因此最后一个示例可以缩短为:

    RewriteRule ^survey/page([1-3])$ survey/index.php?page=$1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-20
      • 2023-03-29
      • 2011-12-09
      • 2012-02-03
      • 2016-12-25
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多