【问题标题】:404 error with .htaccess url slug without a hyphen.htaccess url slug 没有连字符的 404 错误
【发布时间】:2021-11-07 02:52:20
【问题描述】:

我是 .htaccess 的新手,我一直在使用 URL slug 的网站上工作。使用带有连字符的 slug 一切正常,但是当我有一个单词 slug 时,我得到 404 错误。

https://www.example.com/blog/example-blog 工作正常,但 https://www.example.com/blog/example 抛出 404 错误。

下面是我目前使用的.htaccess 代码:

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteRule ^([a-z]+)\/?$ $1.php [NC]

RewriteRule ^([a-zA-Z0-9-]+)\/?$ index.php?url=$1 [NC]
RewriteRule ^([a-zA-Z0-9-]+)\/season\/([0-9]+)\/?$ index.php?url=$1&season=$2 [NC]
  
</IfModule>

我在搜索引擎上到处搜索,但没有运气。非常感谢任何帮助。

总结:

我正在寻找让.htaccess 接受不带连字符的 slug 的方法,因为带连字符的人工作正常。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:
    RewriteRule ^([a-z]+)\/?$ $1.php [NC]
    

    此规则将捕获请求 /example 并无条件地将其重写为 example.php。而 /example-blog(带有连字符)被此规则忽略(因为正则表达式 ^([a-z]+)\/?$ 不匹配)。

    如果需要此规则,则添加一个附加条件,在重写之前检查 .php 文件是否存在(否则应完全删除此规则)。例如:

    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^([a-z]+)/?$ $1.php [NC,L]
    

    现在,只有实际映射到 .php 文件的请求才会被重写。

    更新:

    我已将L 标志添加到上述规则中,尽管没有它仍然可以工作。

    因此,总而言之,您的完整规则集应如下所示:

    RewriteEngine On
    
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^([a-z]+)/?$ $1.php [NC,L]
    
    RewriteRule ^([a-zA-Z0-9-]+)/?$ index.php?url=$1 [L]
    RewriteRule ^([a-zA-Z0-9-]+)/season/([0-9]+)/?$ index.php?url=$1&season=$2 [L]
    

    正则表达式中不需要反斜杠转义斜杠,因此我删除了不必要的反斜杠。 NC 标志在最后两条规则上是多余的,因为您已经在 RewriteRule 模式中匹配了 a-zA-Z。我添加了L 标志,因为您希望在重写后停止处理。

    &lt;IfModule&gt; 容器也不是必需的。

    【讨论】:

    • 感谢您的回复,虽然我的不是重新写入文件,但我只是在创建某种目录。如果我是对的,您提供的代码将不适用于数字,slug url 可能包含字母数字字符
    • @ObedgiuDerrick “虽然我的并没有重新写入文件”——确切地说,但这就是该指令会做的事情(错误),没有前面的 条件。 “您提供的代码不适用于数字” - 我没有提供任何新规则或更改有关数字的任何内容,我只是在您的第一条规则中添加了一个 conditionRewriteCond 指令)。 “slug url 可能包含字母数字字符”——这大概是由最后两条规则处理的。
    • @ObedgiuDerrick 第一条规则(没有条件)将解释/example-blog/example 之间的行为差​​异,正如我在回答中所说的那样。由于该规则仅针对 /example,因此将其重写为 /example.php,这可能是导致 404 的原因。我已经更新了我的答案,并完整总结了您的指令应该是什么样的。当然,如果您不需要第一条规则,则应将其完全删除。
    猜你喜欢
    • 2013-09-18
    • 2016-02-24
    • 2012-06-12
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2015-02-16
    • 2013-11-30
    • 2019-08-06
    相关资源
    最近更新 更多