Php 与全局apache重定向一起使用时如何处理CSS、JS文件(用于用户友好的url)

Php 与全局apache重定向一起使用时如何处理CSS、JS文件(用于用户友好的url),php,apache,url,redirect,Php,Apache,Url,Redirect,我的htaccess文件中包含以下内容: RewriteEngine On RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA] RewriteCond %{REQUEST_FILENAME} !-f 从rewrite.php,我根据url重定向到正确的页面。问题是它重定向了所有文件,包括css和js。我试着把这些文件包括进去,但现在我意识到我太傻了。当url中有适当的扩展名时,是否应该重定向?如果重定向是一种方法,那么哪种方法最好?头位置还是HTTP

我的htaccess文件中包含以下内容:

RewriteEngine On
RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
从rewrite.php,我根据url重定向到正确的页面。问题是它重定向了所有文件,包括css和js。我试着把这些文件包括进去,但现在我意识到我太傻了。当url中有适当的扩展名时,是否应该重定向?如果重定向是一种方法,那么哪种方法最好?头位置还是HTTP_重定向

或者,这不是一个好主意,也不是一项明智的表演或工作?我可以这样做,但我对apache几乎一无所知,我现在不想使用它

RewriteRule ^(.*).css$ /includes/compressor.php?i=$1.css [L]
我以前的htaccess文件中包含以下内容:

RewriteEngine On
RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
我决定删除此项,因为:

  • 我将无法在rewrite.php文件中包含头文件和其他常见文件。我也不能在重写文件中有一个数据库调用来确定要包含的页面,并为页面内容重用数据

  • 不需要的文件可以访问,例如仅由外部应用程序使用的服务


  • 仅当服务器上不存在请求的文件时重定向如何

    您可以使用以下重写条件来实现这一点

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA]
    

    因此,如果请求的是服务器上已经存在的CSS/JS/HTML/Image文件,则不会进行重写,并且会处理对该文件的请求。如果文件不存在,它将运行您的重写规则来重写。php

    仅当服务器上不存在请求的文件时重定向如何

    您可以使用以下重写条件来实现这一点

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA]
    

    因此,如果请求的是服务器上已经存在的CSS/JS/HTML/Image文件,则不会进行重写,并且会处理对该文件的请求。如果文件不存在,它将运行您的重写规则来重写。php

    压缩应该执行一次,而不是针对每个请求。如果相应的文件存在,则可以从URL重写中排除请求:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA]
    

    压缩应该执行一次,而不是针对每个请求。如果相应的文件存在,则可以从URL重写中排除请求:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA]
    

    我想知道wordpress是如何实现的(它将所有内容重定向到index.php)。。。我无法通过查看文件来解读它……我想知道wordpress是如何实现它的(它将所有内容重定向到index.php)。。。我无法通过查看文件来解释…@DominicM无论如何,您应该将所有不应由apache交付的文件移出公共目录。“htdocs”(或服务器上的任何名称)中的所有内容都应该直接交付。@DominicM无论如何,您应该做的是将所有不应由apache交付的文件移出公共目录。“htdocs”(或服务器上的任何名称)中的所有内容都应该直接交付。我不清楚原因#1,#2的情况是否相同?是的,我想在rewrite.php中包含页眉/页脚比我拥有的所有其他文件更方便。我仍然认为有一个原因,但我现在想不出一个好的原因,当然wordpress的设计者有一个很好的原因,你能想出任何原因吗?你能澄清“-l”和“RewriteRule^.*$-[NC,l]”的含义吗?我无法从重写备忘单中确定:)
    -l
    只是说明%{REQUEST\u FILENAME}是否是指向文件的有效符号链接。
    RewriteRule^.$-
    是您表示不要重写请求的方式<代码>^.*$匹配所有内容,
    -
    基本上没有重写请求,它只是告诉Apache按照请求提供文件。我不清楚原因#1,#2的情况是否相同?是的,我想在rewrite.php中包含页眉/页脚比我拥有的所有其他文件更方便。我仍然认为有一个原因,但我现在想不出一个好的原因,当然wordpress的设计者有一个很好的原因,你能想出任何原因吗?你能澄清“-l”和“RewriteRule^.*$-[NC,l]”的含义吗?我无法从重写备忘单中确定:)
    -l
    只是说明%{REQUEST\u FILENAME}是否是指向文件的有效符号链接。
    RewriteRule^.$-
    是您表示不要重写请求的方式<代码>^.*$匹配所有内容,
    -
    基本上没有重写请求,它只是告诉Apache按照请求提供文件。