我有一个用例,文件夹中可以有HTML或PHP文件,但用户只能访问HTML文件。我只是在缺少HTML文件时才寻找htaccess重定向。经过一些研究,我尝试下面的代码,无论文件是否存在,总是重定向到php文件。因此,如果有一个文件test.html,则无需重定向到test.php。
RewriteEngine on
RewriteCond ^wp-content/uploads/(.*)/test.html !-f
RewriteRule ^wp-content/uploads/(.*)/test.html?$ wp-content/uploads/$1/test.php [NC,L]
答案 0 :(得分:2)
-f
需要完整的文件系统路径,%{REQUEST_FILENAME}
表示带有当前请求的完整路径的文件名。
你的规则必须这样写:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(wp-content/uploads/[^/]+/test)\.html?$ $1.php [NC,L]
答案 1 :(得分:1)
我认为在您的情况下,您希望将.html
个文件的优先级(如果缺少)设置为.php
并强制用户请求.php
访问.html
除非找不到,所以请尝试以下代码:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.php[\s?/] [NC]
RewriteRule ^ /%1%2 [R,L,NE]
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ /$1.html [L]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ /$1.php [L]
上面的代码将传递所有.html
并检查不带扩展名的请求.html
,并删除.php
请求并检查是否.html
具有相同的名称,否则,按原样去。