我当前的.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 /)的第一个参数,而我找不到正确的服务器变量。
答案 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
标志,除非你有其他指令可能会发生冲突吗?