Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重写URL';s到同一个目录_Php_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 重写URL';s到同一个目录

Php 重写URL';s到同一个目录,php,.htaccess,mod-rewrite,url-rewriting,Php,.htaccess,Mod Rewrite,Url Rewriting,我完全重写了我网站的代码,因为很多东西都可以优化。另外,我目前使用的重写规则也没有我认为的那么优化 我希望URL如下所示: Cities: domain.com/new-york domain.com/chicago domain.com/dallas ... Categories: domain.com/fruit domain.com/meat domain.com/beverage ... 目前,我的htaccess文件中有以下代码: RewriteCond %{REQUEST_FIL

我完全重写了我网站的代码,因为很多东西都可以优化。另外,我目前使用的重写规则也没有我认为的那么优化

我希望URL如下所示:

Cities:
domain.com/new-york
domain.com/chicago
domain.com/dallas
...

Categories:
domain.com/fruit
domain.com/meat
domain.com/beverage
...
目前,我的htaccess文件中有以下代码:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/\.]+) index.php?task=cityorcategory&cityorcat=$1 [L]
我在索引文件中的操作如下:

  • 检查任务是否为“cityorcategory”
  • 将“cityorcat”的值放入变量中
  • 将变量与类别数据库表进行比较
  • 如果是类别,我将重定向到类别模板
  • 否则,我重定向到城市模板
  • 我不想检查变量是否是索引文件中的一个类别,因为我认为这对网站性能不好

    我不确定我需要改变什么。我可以保持像index.php这样的URL结构吗?task=cityrocategory&cityrocat=$1,或者这是个坏主意


    我需要更改什么才能排除数据库中的变量比较?

    如果是cityorcategory,例如/city.php,您可以重写到单独的页面

    或者您可以将索引.php视为一个分发中心,并在$GET(“任务”)

    上建立一个开关。
    switch ($_GET['task']) {
    
      case 'cityorcategory':
      // redirect
      break;
    
      case 'countrycategory':
      // redirect
      break;
    
      default:
        echo "Not a category, so process";
      break;
     }
    
    如果您只是问:我如何知道数据库中是否存在类别。。只需运行一个查询。我假设你无论如何都必须基于类别构建页面。如果运行查询并返回0条记录,则类别不存在,您可以显示defaul索引页

    或者,如果您没有很多类别,并且它们没有更改,则可以创建一个类别数组,并使用现有类别对照该数组进行检查。然而,这有点奇怪。但是,如果你死心塌地地地想重蹈覆辙


    在最后一种情况下:您可以对现有类别执行HTACCESS匹配,同样:如果这些类别数量有限,请不要更改。

    您可以使用rewritemaps并让cronjob每隔x分钟构建一次映射。取决于数据更改的频率。

    所以绝对有必要对数组进行查询或比较?例如,像index.php?task=city&cityname=$1和index.php?task=category&catname=$1这样的东西是不可能的?我猜htaccess无法检测出这两个选项中的哪一个是正确的,因为它们具有相同的URL结构?附言:我有几百个类别,它们几乎每周都在变化。