我的网站上有一些类似的网页:
然后
现在我用标签菜单简化了网站,我只有
现在我想要尝试去的人:example.com/cats-foo1.php 被重定向到:example.com/cats.php 而不是获得404 无论如何,也许有htaccess?
答案 0 :(得分:1)
这可能就是你要找的东西:
RewriteEngine on
RewriteRule ^/?cats-.+.php$ /cats.php [R=301]
为此,您需要将重写模块启用到http服务器。您应该将它放在http服务器主机配置中。如果您决定使用动态配置文件(.htaccess
),则需要首先启用它们的解释(请参阅官方文档中的AllowOverride
指令)。
我建议更进一步,使用模式https://example.com/cats
中的网址,这样就没有标准的.php
。您需要一些额外的内部重写规则:
RewriteEngine on
# external redirect from /cats-foo.php to /cats
RewriteRule ^/?cats-.+\.php$ /cats [R=301]
RewriteRule ^/?cats\.php$ /cats [R=301]
# internal rewrite
RewriteRule ^/?cat$ /cats.php [END]
这也可以概括为:
RewriteEngine on
# external redirect from /cats-foo.php to /cats
RewriteRule ^/?(\w+])-.+.php$ /$1 [R=301]
# internal rewrite
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(\w+])$ /$1.php [END]
如果您遇到具有该规则的http状态500,则可能会运行非常旧版本的apache http服务器。您将在http服务器错误日志文件中找到抱怨END
标志的条目。在这种情况下,将其替换为L
标志,然后重试。
您可能需要调整这些行,我们不知道您的具体情况。但是上面的内容应该让您开始并阅读您使用的工具的文档,您可以从这里开始:http://httpd.apache.org/docs/current/mod/mod_rewrite.html
一般提示:您应该始终更喜欢将此类规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess
样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。它们仅作为最后一个选项提供给您无法控制主机配置的情况(阅读:非常便宜的托管服务提供商),或者您有一个依赖于编写自己的重写规则的应用程序(这是一个明显的安全噩梦) )。