0

我的 htaccess 文件中有以下内容:

RewriteEngine On
RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA]

从 rewrite.php 我根据 url 重定向到正确的页面。问题是它重定向了所有文件,包括 css 和 js。我尝试包含这些文件,但我现在意识到这对我来说很愚蠢。当网址中有适当的扩展名时,我应该重定向吗?如果重定向是要走的路,哪种方法最好?标头位置或 HTTP_redirect?

或者这不是一个好主意的表现或明智的工作?我可以选择这样的东西,但我对 apache 几乎一无所知,现在宁愿不使用它。

RewriteRule ^(.*).css$ /includes/compressor.php?i=$1.css [L]

我以前在我的 htaccess 文件中有以下内容:

RewriteCond %{REQUEST_FILENAME} !-f

我决定删除它,因为:

  1. 我将无法在 rewrite.php 文件中包含标头和其他常见文件。我也无法在重写文件中进行数据库调用,以确定要包含的页面并重用页面内容的数据。

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

4

2 回答 2

2

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

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ rewrite.php?data=$1 [L,QSA]
于 2012-10-15T23:26:51.213 回答
1

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

您可以使用以下重写条件来实现此目的。

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 文件,则不会发生重写,并且会处理对文件的请求。如果该文件不存在,它将运行您的重写规则到 rewrite.php

于 2012-10-15T23:26:42.817 回答