Regex 将所有内容重定向到一个文件,不允许直接访问PHP文件

Regex 将所有内容重定向到一个文件,不允许直接访问PHP文件,regex,apache,.htaccess,mod-rewrite,Regex,Apache,.htaccess,Mod Rewrite,我正在努力在我的.htaccess文件中创建一组规则,结果是不断出现500个内部服务器错误 RewriteRule ^(.*)\.php$ /router.php?rq=$1 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /router.php?rq=$1 [L,QSA] 我希望.htaccess的行为如下: 所有请求(资源、图像、CSS、js等除外)都应

我正在努力在我的.htaccess文件中创建一组规则,结果是不断出现500个内部服务器错误

RewriteRule ^(.*)\.php$ /router.php?rq=$1

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /router.php?rq=$1 [L,QSA]
我希望.htaccess的行为如下:

  • 所有请求(资源、图像、CSS、js等除外)都应 重定向到/router.php,保留查询字符串。我不需要这个 请求URI作为查询字符串,因为它可以通过
    $\u服务器['REQUEST\u URI']
    不管怎样

  • 所有直接访问PHP文件的尝试,例如用户输入 “index.php”也应该重定向到router.php


  • 您可以将此规则用于路由:

    RewriteCond %{REQUEST_URI} !/router\.php [NC]
    RewriteRule \.php$ /router.php [NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ /router.php [NC,L]
    

    这是可行的,但如果它存在,它仍然会转到某个PHP文件。例如,如果我输入
    /test.php
    (一个现有文件),它将加载该文件,而不是
    router.php
    ,真的吗?这是不应该发生的,我在发布之前已经明确地测试了这个条件。但是我会把这个规则分成2来强制执行。谢谢,但是现在不管我加载了什么URL,我都会有500个内部错误,这真的很奇怪,因为我再次测试了它,发现它工作正常。您的.htaccess或系统中的任何其他.htaccess中是否有其他规则。如果您使用的是CMS/PHP框架,请告诉我