apache2 mod_rewrite每个目录请求在rewritecond中

时间:2015-12-24 16:32:27

标签: apache .htaccess mod-rewrite

我当前的.htaccess文件有效,但我认为这不是解决此问题的最佳方式,我担心它将来会因更多重写规则而无法工作。

htaccess的:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^files/(.*) files/$1 [END]

RewriteRule ^(.*) files/$1 [END]
</IfModule>

服务器检查网址是否会导致&#34;文件&#34;文件夹,只有在其他地方引导时才会重写。

我试过像

这样的东西
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule !^files/(.*) files/$1 [END]
</IfModule>

但由于我无法通过$ 1变量,因此无法正常工作。我不喜欢

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{URL_STARTING_AT_THIS_POINT} ^files/*
RewriteRule ^(.*) files/$1 [END]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !%{URL_TO_THIS_HTACCESS}/files/*
RewriteRule ^(.*) files/$1 [END]
</IfModule>

我没有为此找到任何服务器变量。我想比较RewriteCond中RewriteRule(^ files /)的第一个参数,而我找不到正确的服务器变量。

1 个答案:

答案 0 :(得分:1)

  

我没有为此找到任何服务器变量。

您可能接受的服务器变量是REQUEST_URI - 其中包含URL路径,包括斜杠前缀。例如:

RewriteCond %{REQUEST_URI} !^/files/
RewriteRule (.*) files/$1 [L]

或者,您可以简单地写一下:

RewriteRule !^files/ files%{REQUEST_URI} [L]

但是,您的原始指令可能没问题,但可以稍微整理一下:

RewriteRule ^files/(.*) - [L]
RewriteRule (.*) files/$1 [L]

当URL没有变化时,可以使用替换中的连字符。我不认为你真的需要END标志,除非你有其他指令可能会发生冲突吗?