【问题标题】:HTACCESS redirecting a URL with no extensionHTACCESS 重定向一个没有扩展名的 URL
【发布时间】:2017-05-15 15:56:14
【问题描述】:

这似乎应该是一件相对容易的事情,但我想不通。我正在尝试使用 htaccess 文件进行重定向: http://www.example.com/page(或http://example.com/page) 到 http://www.example.com/page.htm

这是一个非常特殊的情况,我不需要任何通配符或任何将 /anything 重定向到 /anything.htm - 只需要特别是“/page”到“/page.htm”

我做了一些搜索,发现了相反的情况(从 /page.htm 到 /page)和其他使用通配符的情况,但找不到像这样的一个非常具体的重定向。提前致谢。

编辑:我遇到了麻烦,因为 htaccess 文件中的另一条规则似乎在干扰:

RewriteCond %{REQUEST_URI} !^/(admin|css|js|images|img|handouts|amp_sections|amp_sections\/handouts)($|/)
RewriteCond %{REQUEST_URI} !\.(gif|jpg|jpeg|js|png|bmp|ico|css|shtml|dat|xml|csv|txt|rtf|doc|docx|xls|xlsx|ppt|pptx)$
RewriteCond %{REQUEST_URI} !301
RewriteCond %{REQUEST_URI} !401
RewriteCond %{REQUEST_URI} !403
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /base.php?page=$1 [P,QSA]

因此,当我将页面重定向规则设置为 page.htm 时,输入 example.com/page 会将我带到 http://www.example.com/page.htm?page=page,这显然不是预期的行为。我不知何故需要让“新”规则优先于其他规则。

【问题讨论】:

    标签: apache .htaccess redirect


    【解决方案1】:

    尝试在您的 .htaccess 中使用它:

    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} ^example.com$ [NC,OR]
    RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
    RewriteRule ^page/?$ http://example.com/page.htm [L,R=302,NC]
    

    基本上这条规则是获取目录/page,如果被调用,它会将其更改为/page.htm

    确保在更改之前清除缓存。

    出于测试目的,我已将 R 设置为 302,因为这使其成为临时重定向。如果这对您有用,请将其更改为 301 以使其成为永久重定向。

    【讨论】:

    • 感谢您的回复。我刚刚用更多信息更新了我的原始帖子。如果不是 htaccess 文件中已经存在的“干扰”规则,我相信您发布的内容会起作用。
    • 根据 starkeen 的建议,将其置于现有规则之上,现在它运行良好。实际上,我确实尝试将它放在首位,但在使用文件末尾的新规则尝试它后并没有清除我的缓存。谢谢!
    • 太棒了!我很高兴它正在工作 :) 感谢@starkeen 的输入和帮助。
    【解决方案2】:

    您也可以使用 RedirectMatch

    RedirectMatch 301 ^/page/?$ http://www.example.com/page.html
    

    在测试此重定向之前清除浏览器缓存。

    【讨论】:

    • 重定向确实有效,但在浏览器中可见的 URL 是:example.com/page.htm?page=page 同样,这是由 htaccess 文件中已经存在的其他规则引起的(必须保留)
    • @JohnO 你无法避免这种情况。实际上,RewriteRule 和 RedirectMatch 的运行时行为是不同的。 RewriteRule 首先在 apache 上运行。尝试一下thickguru 的基于RewriteRule 的解决方案并将规则放在最前面。
    • 成功了,谢谢!我在上面的帖子中发表了另一条评论。
    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2012-11-12
    • 2012-10-24
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多