【问题标题】:htaccess RewriteRule - Removing '/' From The URL Causes Request To Display In URLhtaccess RewriteRule - 从 URL 中删除“/”会导致请求在 URL 中显示
【发布时间】:2015-03-28 21:29:14
【问题描述】:

我有一点关于 .htaccess 的问题。

问题更多在于美观而不是功能。 我有一个非常小的 htaccess 文件,其中包含以下内容,仅此而已:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9\/\-]*)$ index.php?request=$1 [QSA]

这会将任何请求发送到 index.php,并在 URI 中进行解析。然后我操作/读取 URI 以获取相关文件。

一个示例 URL 是这样的: http://localhost/domain/fixtures/2015/

现在,如果我要删除结尾的“/”,然后按 Enter,则 URL 将更改为: http://localhost/domain/fixtures/2015/?request=fixtures/2015

我尝试在重写中添加一个“/”,但它什么也没做。 我在谷歌上搜索了无济于事。 (请记住,我的一些搜索类似于“/ 添加到 url htaccess 重写”)

我想让这个排序的主要原因是它看起来不漂亮,还因为它创建了重复的内容(即你可以从两个 URL 访问同一页面),这对 SEO 不利。

我能指出的任何方向都是很大的帮助。

干杯

【问题讨论】:

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


    【解决方案1】:

    如果我没看错的话,您需要这种形式的外部 URL:

    http://localhost/domain/fixtures/2015/
    

    而不是这种形式:

    http://localhost/domain/fixtures/2015
    

    为了实现这一点,你需要使用重定向来让远程 客户知道后一种形式无效,例如,

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule .* %{REQUEST_URI}/ [R=301,L]
    

    如果您还提供静态内容,您可能也需要这样:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !/$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* %{REQUEST_URI}/ [R=301,L]
    

    所以,包括您的 PHP 内容生成器的完整配方:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !/$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* %{REQUEST_URI}/ [R=301,L]
    RewriteRule ^([a-zA-Z0-9\/\-]*)$ index.php?request=$1 [QSA]
    

    【讨论】:

    • 谢谢,但这似乎没有任何作用。我认为最简单的方法是将任何不带斜杠的 url 重定向到与它相同的 url。我只是不想在 url 中出现“.../?request=*”...
    • 我一定不明白你在问什么。首先,上面的代码肯定会将任何不带斜杠的 URL 重定向到带有斜杠的同一个 URL。其次,说您希望所有 URL 都有一个尾部斜杠似乎是荒谬的,但您不希望它们以斜杠结尾。我只能推测我完全误解了你原来的帖子。
    • 不,你已经完全理解了。该代码似乎根本没有任何影响。也许是因为它在涉及 htaccess 之前添加了“?request=fixtures”。我不认为我在问题中提到(不知道为什么,现在我回头看)当我转到“localhost/domain/fixtures”时,地址栏中的 URL 更改为“localhost/domain/fixtures/?request=fixtures”。但是,当我尝试访问“localhost/domain/fixtures”时不会发生这种情况。
    • 您好,我刚刚尝试在另一台 PC 上转到不带斜杠的 URL,它已重定向到与它相同的 URL。所以,我想它已经奏效了!也许我的 PC 上正在进行某种缓存(尽管我做了很多硬刷新,而且我很确定 .htaccess 无论如何都没有下载到客户端)。非常感谢您的回复
    • 正确,.htaccess 不打算下载到浏览器。请注意,在服务器配置与 .htaccess 的上下文中使用 mod_rewrite 时存在差异。最好的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 2018-10-04
    • 2020-11-17
    • 2011-05-20
    • 2017-03-15
    • 1970-01-01
    相关资源
    最近更新 更多