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
Apache URL重写:重写规则冲突_Apache_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Apache URL重写:重写规则冲突

Apache URL重写:重写规则冲突,apache,.htaccess,mod-rewrite,url-rewriting,Apache,.htaccess,Mod Rewrite,Url Rewriting,我试图通过URL重写做三件事: 删除.php文件扩展名 我的帖子URL如下所示:mydomain.co.uk/resources/example-post默认为mydomain.co.uk/resources/post.php?s=example post 让我的类别存档URL如下所示:mydomain.co.uk/resources/category/example-category默认为mydomain.co.uk/resources/archive.php?cat=example cate

我试图通过URL重写做三件事:

  • 删除.php文件扩展名
  • 我的帖子URL如下所示:mydomain.co.uk/resources/example-post默认为mydomain.co.uk/resources/post.php?s=example post
  • 让我的类别存档URL如下所示:mydomain.co.uk/resources/category/example-category默认为mydomain.co.uk/resources/archive.php?cat=example category
  • 这是我目前在.htaccess文件中的内容:

    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^([^\.]+)$ $1.php [L,QSA]
    
    RewriteRule ^resources/([a-zA-Z0-9-/]+)$ /resources/post.php?s=$1 [L]
    
    RewriteRule ^resources/category/([a-zA-Z0-9-/]+)/page/([0-9]+)/{0,1}$ /resources/archive.php?cat=$1&page=$2 [L]
    RewriteRule ^resources/category/([a-zA-Z0-9-/]+)$ /resources/archive.php?cat=$1 [L]
    
    它在做前两件事。但不是第三个

    如果我删除

    RewriteRule ^([^\.]+)$ $1.php [L,QSA]
    
    然后它做第三件事,但不是前两件事

    你知道怎么回事吗?如何让它同时完成这三件事?

    找到了解决方案

    只是需要交换订单,我现在有了这个:

    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^([^\.]+)$ $1.php [L,QSA]
    
    RewriteRule ^resources/category/([a-zA-Z0-9-/]+)/page/([0-9]+)/{0,1}$ /resources/archive.php?cat=$1&page=$2 [L]
    RewriteRule ^resources/category/([a-zA-Z0-9-/]+)$ /resources/archive.php?cat=$1 [L]
    
    RewriteRule ^resources/([a-zA-Z0-9-/]+)$ /resources/post.php?s=$1 [L]
    

    它工作得很好。

    你是在按原样做。您应该始终调用“最终”url,然后将其重写为php脚本。ie.mydomain.co.uk/resources/category/example-category转换为mydomain.co.uk/resources/archive.php?cat=示例类别,而不是相反。对不起,我不明白你的意思。我对URL重写不太在行,换个方式吧。调用页面mydomain.co.uk/resources/category/example-category,而不是调用mydomain.co.uk/resources/archive.php?cat=example-category,然后重写到mydomain.co.uk/resources/archive.php?cat=example-category。尝试将它们交换。但它不起作用。我可能在最初的问题中写错了东西。我已经编辑过了。