我想使用Apache来使用不同页面的代码与特定的URL

holgip5t  于 2023-10-23  发布在  Apache
关注(0)|答案(1)|浏览(120)

我已经在这个问题上工作了一段时间了。我是新来的,所以我不知道我在做什么。
但基本上我试图检测什么时候输入了一个不存在的URL,然后根据特定的URL输出一个index.php文件。
这是我目前所拥有的

RewriteCond %{HTTP_HOST} ^(example.com)$
RewriteRule ^/?twyyt/(.*) /index.php

假网址如下

https://www.example.com/twyyt/6543

当这个网址输入,我想该网站使用的代码从example.com/index.php
我做错了什么?

kokeuurv

kokeuurv1#

RewriteCond %{HTTP_HOST} ^(example.com)$
RewriteRule ^/?twyyt/(.*) /index.php

假网址如下

https://www.example.com/twyyt/6543

您正在请求www.example.com,但仅在 conditionRewriteCond指令)中检查example.com,因此该规则永远不会触发。
否则,这里没有什么特别的“错误”。然而...

  • 除非您从同一个地方托管多个域,否则您不需要显式检查请求的主机名。(你当然不需要用括号中的子模式来 * 捕获 * 它。)
  • 同样,您不需要捕获/twyyt/之后的URL路径。(你没有使用它)。
  • 您缺少L(或END)标志,因此处理将继续通过文件。(如果您有任何后续指令,则很重要。)

因此,以下内容可能足够:

RewriteEngine On

RewriteRule ^twyyt/ index.php [L]

.htaccess中,RewriteRule * 模式 * 上不需要/?前缀。同样,substitution 字符串上不需要斜杠前缀(重写为文件路径,而不是URL路径)。
我正在尝试检测何时输入了不存在的URL
这实际上并没有检查请求是否Map到一个 file,如果这就是你所暗示的?上面的规则在内部将所有格式为/twyyt/<anything>的请求重写为/index.php。因此,任何静态资产都不应该以/twyyt/开头。
但是,如果你只想重写/twyyt/<number>形式的URL(如你的例子),那么正则表达式可以相应地修改:

RewriteRule ^twyyt/\d+$ index.php [L]

或者,要专门检查请求是否Map到文件,您需要单独的 * 条件 *。举例来说:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^twyyt/ index.php [L]

相关问题