Php htaccess重写规则同一域

Php htaccess重写规则同一域,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我在.htaccess文件上有一个url重写问题。该文件中有两条规则: 规则1//当用户在浏览器上打开“example.com/test.php”时,用户将被重定向到“example.com/test” 规则2//当用户打开“example.com/test”时,我们将从“example.com/test.php”检索内容 现在这些规则不起作用了,也许在某个地方有冲突。 对于上述条件,我应该使用哪些重写规则?这两个规则彼此冲突。一个将test.php写入test,另一个将test写入test.p

我在.htaccess文件上有一个url重写问题。该文件中有两条规则:

规则1//当用户在浏览器上打开“example.com/test.php”时,用户将被重定向到“example.com/test”

规则2//当用户打开“example.com/test”时,我们将从“example.com/test.php”检索内容

现在这些规则不起作用了,也许在某个地方有冲突。
对于上述条件,我应该使用哪些重写规则?

这两个规则彼此冲突。一个将test.php写入test,另一个将test写入test.php,这可能会使您处于无限循环中,无论是在重写引擎中还是在浏览器和服务器之间,这取决于您如何实现重写

为了解决这个问题,我使用了一个条件来检查请求的URI,而不是当前重写的URI

试试这个:

RewriteRule ^test/$ test.php [NC]

RewriteCond %{THE_REQUEST} ^[A-Z]+\ (/[^\ ]*)\.php[?\ ]
RewriteRule ^test\.php(.*)$ http://example.com/test/$1 [R=301,NC]
需要注意的几件事也可能是一些因素:

  • 在第一次重写时,您在
    test.php
    中没有逃过一点
  • Apache指令可能会妨碍您,并在您着手处理.htaccess中的URI之前进行一些重写。如果您有test.php文件,但是刚刚向发出了一个请求,那么您的htaccess将使用test.php,而不仅仅是您所期望的test
  • 浏览器缓存重定向会使诊断问题变得困难
  • 很可能会回答你的问题。我无法从“规则不起作用”的描述中判断您是否忘记激活mod_rewrite,或者您得到了一个无限循环。
    htaccess rule: RewriteRule ^test/ test.php [NC]
    
    RewriteRule ^test/$ test.php [NC]
    
    RewriteCond %{THE_REQUEST} ^[A-Z]+\ (/[^\ ]*)\.php[?\ ]
    RewriteRule ^test\.php(.*)$ http://example.com/test/$1 [R=301,NC]