.htaccess 如何防止编辑网址时不存在的网页?

nc1teljy  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(121)

我有这样的URL:

  1. https://example.com/mobile/brand(正确答案)
  2. https://example.com/hello-mobile/brand(错误的URL不令人兴奋)
    我的第一个网址(移动的/品牌)是正确的,但当我编辑我的第一个网址(你好-手机/品牌)从浏览器然后第二个错误的网址也打开错误的路径。所有的类别和子类别的值来自动态与mysql和php。
    目前我正在使用这个。htaccess文件的类别和子类别。请帮助解决这个问题。
Options -MultiViews
RewriteEngine on
RewriteRule ^([^/\.]+)/?$ category.php?slug=$1 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)$ sub-category.php?slug1=$1&slug=$2 [L]
rekjcdws

rekjcdws1#

我从问题和评论中得到的印象是,你实际上是在问如何将/hello-mobile/brand重定向到/mobile/brand,而与你如何在内部重写类别和子类别无关。
如果这是你真正的问题,那么考虑这个例子:

RewriteEngine on

# redirect unknown categories
RewriteCond %{REQUEST_URI} !^/(mobile|desktop)/
RewriteRule ^/?[^/]+/(.*)$ /mobile/$1 [R=301,L]

# rewrite requests to category
RewriteConf %{REQUEST_URI} !-f
RewriteRule ^/?([^/]+)/?$ /category.php?category=$1 [L]

# rewrite requests to subcategory
RewriteConf %{REQUEST_URI} !-f
RewriteRule ^/?([^/]+)/([^/]+)/?$ /sub-category.php?category=$1&subcategory=$2 [L]

这个例子将把所有请求重定向到一个类别,这个类别 * 不是 * 第一个RewriteCond(“移动的”或“desktop”)中提到的类别之一,重定向到默认类别“mobile”。
您可以在http服务器的主机配置中实现这些规则。如果你正在使用一个廉价的主机提供商),那么你可以通过接受这种方法的缺点(速度,复杂性,可维护性,健壮性)来选择使用一个 * 分布式 * 配置文件(“.htaccess”)。
一开始使用R=302temporary 重定向是一个好主意。只有当一切都按预期工作时,才将其改为R=301permanent 重定向。这可以避免客户端缓存响应的问题。

相关问题