【问题标题】:Is there any way to simplify my url with .htaccess?有什么方法可以用 .htaccess 简化我的网址?
【发布时间】:2021-02-28 05:58:58
【问题描述】:

我正在尝试使用 .htaccess RewriteRule 简化我的网址,但我没有成功。

我希望 http://localhost/site/auth 中的 url 与 http://localhost/auth 一样,我想从 url 中删除 site

到目前为止我尝试了什么

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite --- http://localhost/site/auth => http://localhost/auth
RewriteRule ^site/auth$ /auth?&%{QUERY_STRING}
</IfModule>

【问题讨论】:

    标签: apache .htaccess codeigniter


    【解决方案1】:

    您需要反过来编码规则。你想在内部重写 incoming 请求,所以请求http://localhost/auth ...

    RewriteEngine On
    Rewrite ^/?auth$ => /site/auth [END]
    

    就是这样。

    这里无需测试现有文件或文件夹,因为您没有实施通用规则,而是实施特定规则。并且不需要添加查询字符串,无论如何这是重写的默认值。我也看不到 &lt;IfModule ...&gt; 括号的好处,因为如果没有该模块,您的逻辑将无法正常工作:

    为此,需要将 apache http 服务器的重写模块加载到服务器中,并且需要为 http 主机“localhost”激活它,这很可能只是您的默认主机。

    如果您还想添加外部重定向,可以这样做:

    RewriteEngine On
    RewriteRule ^/?site/auth$ /auth [R=301,END]
    Rewrite ^/?auth$ => /site/auth [END]
    

    您可能希望首先使用R=302 临时重定向,然后再将其更改为R=301 永久重定向,一旦您确定一切都按预期工作。这样可以防止缓存问题。


    在你的 http 服务器的实际主机配置中实现这样的规则是有意义的。如果您更喜欢使用分布式配置文件(“.htaccess”),例如因为您计划稍后部署到便宜的主机提供商,而您无法访问实际配置,那么您需要确保对此类的解释为该位置启用了文件(请参阅文档中的 AllowOverride 指令)。在这种情况下,您需要接受性能损失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2014-11-04
      • 2021-02-17
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      相关资源
      最近更新 更多