Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php htaccess mod_rewrite-排除最后/请求中的URI_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php htaccess mod_rewrite-排除最后/请求中的URI

Php htaccess mod_rewrite-排除最后/请求中的URI,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我试图寻找这个问题的答案,但似乎找不到答案 我想要的是,当有人访问某个页面时,apache检查该页面是否存在缓存文件,然后加载该文件,而不是让php提供服务 例如: 为此,我使用下面的代码,它是有效的。但当我在结尾添加一个/时,它就不再工作了。我试图使缓存文件包含斜杠,但这是不可能的 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_METHOD} !^(POST)$ RewriteCond %{DOCUM

我试图寻找这个问题的答案,但似乎找不到答案

我想要的是,当有人访问某个页面时,apache检查该页面是否存在缓存文件,然后加载该文件,而不是让php提供服务

例如: 为此,我使用下面的代码,它是有效的。但当我在结尾添加一个/时,它就不再工作了。我试图使缓存文件包含斜杠,但这是不可能的

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(POST)$
RewriteCond %{DOCUMENT_ROOT}/cached_pages/%{REQUEST_URI}.html -f
RewriteRule . %{DOCUMENT_ROOT}/cached_pages/%{REQUEST_URI}.html
</IfModule>

重新启动发动机
重写cond%{REQUEST_METHOD}^(职位)$
重写cond%{DOCUMENT\u ROOT}/cached\u pages/%{REQUEST\u URI}.html-f
重写规则%{DOCUMENT_ROOT}/cached_pages/%{REQUEST_URI}.html

我找到了一个解决方案@ishegg帮助我修改了RewriteRule,在ReWriteCond中我使用了一个变量

<IfModule mod_rewrite.c>
RewriteEngine On
SetEnvIf Request_URI "^(.+?)/?$" PATH=$1
RewriteCond %{REQUEST_METHOD} !^(POST)$
RewriteCond %{DOCUMENT_ROOT}/cached_pages/%{ENV:PATH}.html -f
RewriteRule ^(.+?)/?$ %{DOCUMENT_ROOT}/cached_pages/$1.html
</IfModule>

重新启动发动机
SetEnvIf请求_URI“^(+?)/?$”路径=$1
重写cond%{REQUEST_METHOD}^(职位)$
重写cond%{DOCUMENT_ROOT}/cached_pages/%{ENV:PATH}.html-f
重写规则^(+?)/?$%{DOCUMENT_ROOT}/cached_pages/$1.html

我找到了一个解决方案@ishegg帮助我修改了RewriteRule,在ReWriteCond中我使用了一个变量

<IfModule mod_rewrite.c>
RewriteEngine On
SetEnvIf Request_URI "^(.+?)/?$" PATH=$1
RewriteCond %{REQUEST_METHOD} !^(POST)$
RewriteCond %{DOCUMENT_ROOT}/cached_pages/%{ENV:PATH}.html -f
RewriteRule ^(.+?)/?$ %{DOCUMENT_ROOT}/cached_pages/$1.html
</IfModule>

重新启动发动机
SetEnvIf请求_URI“^(+?)/?$”路径=$1
重写cond%{REQUEST_METHOD}^(职位)$
重写cond%{DOCUMENT_ROOT}/cached_pages/%{ENV:PATH}.html-f
重写规则^(+?)/?$%{DOCUMENT_ROOT}/cached_pages/$1.html

您正在捕获所有内容,因此重写URL的结果如下:
缓存的\u页面/about/.html
。尝试类似于
RewriteRule^(+?)/?$%{DOCUMENT_ROOT}/cached_pages/$1.html
@ishegg的方法,这似乎对规则很有效,谢谢!但是我不能在上面的条件下这样做吗?我真的找到了解决办法。我会把它作为我的答案,如果其他人有一个更好的,他们可以张贴它。感谢您的帮助您正在捕获所有内容,因此重写URL的结果如下:
cached_pages/about/.html
。尝试类似于
RewriteRule^(+?)/?$%{DOCUMENT_ROOT}/cached_pages/$1.html
@ishegg的方法,这似乎对规则很有效,谢谢!但是我不能在上面的条件下这样做吗?我真的找到了解决办法。我会把它作为我的答案,如果其他人有一个更好的,他们可以张贴它。谢谢你的帮助,使用ENV变量真的很聪明。干杯使用ENV变量真的很聪明。干杯