gpt4 book ai didi

apache - 设置自定义处理程序时重定向失败

转载 作者:行者123 更新时间:2023-12-02 09:14:02 29 4
gpt4 key购买 nike

我的自定义配置文件中有以下代码。

<Directory "/www">
Options Indexes FollowSymLinks
AllowOverride All
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
ErrorDocument 403 "Please disable proxies to view content."
RewriteEngine On
RewriteRule ^(.*\.php)s$ $1 [H=application/x-httpd-php-source]
RewriteRule ^faq/(\w+)/(\d+)/?$ faq.php?code=$1&num=$2 [NC]
</Directory>

现在,当我浏览到 /index.phps/some/other/dir/and/file.phps 等网页时,我收到 404 错误浏览器和 apache 的错误日志中记录以下内容:

[<date>] [:error] [pid 15154:tid 3024079728] [client <IP>] script 'redirect:/request/get_req.php' not found or unable to stat
[<date>] [:error] [pid 15152:tid 2914974576] [client <IP>] script 'redirect:/index.php' not found or unable to stat

什么可能导致此问题? 另外,请注意 faq/.. 的第二个 RewriteRule 工作正常。我在每个目录的 htaccess 文件中还有一些重写规则,并且所有这些规则都正常工作。

我使用的服务器版本是Apache/2.4.9 (Unix)

<小时/>

遵循 covener 的建议后和 anubhava ;我将我的 conf 文件更新为:

<VirtualHost *:80>
DocumentRoot "/www"
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
LogLevel warn
</VirtualHost>
<Directory "/www">
Options Indexes FollowSymLinks
AllowOverride All
RewriteEngine On
# RewriteRule ^(.*\.php)s$ %{DOCUMENT_ROOT}/$1 [H=application/x-httpd-php-source]
# RewriteRule ^/?(.*\.php)s$ %{DOCUMENT_ROOT}/$1 [H=application/x-httpd-php-source]
# RewriteRule ^(.*\.php)s$ $1 [H=application/x-httpd-php-source]
RewriteRule ^(.*\.php)s$ %{DOCUMENT_ROOT}/$1 [H=application/x-httpd-php-source]
RewriteRule ^faq/(\w+)/(\d+)/?$ faq.php?code=$1&num=$2 [NC]
</Directory>

但是 php 源代码的处理程序仍然记录相同的错误:

[<date>] [:error] [pid 17586:tid 2956938096] [client <IP>] script 'redirect:/index.php' not found or unable to stat

最佳答案

要使其正常工作,您需要从 <Directory> 中取出此代码片段容器并将其放入 <VirtualHost> block :

<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
RewriteEngine On
RewriteRule ^(.*\.php)s$ $1 [H=application/x-httpd-php-source]

它在<VirtualHost>中起作用的原因阻塞是因为重写发生在早期阶段apache 处理即 per-server语境。然而当它发生在per-dir时上下文中,它发生在后期阶段并导致请求在替换后重新启动。如果在每个目录上下文中进行替换,则会使用新 URL 发出新的内部子请求,从而重新启动请求阶段的处理。

查看此mod_rewrite tech reference了解更多详情

我的VirtualHost条目:

<VirtualHost *:80>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
ErrorDocument 403 "Please disable proxies to view content."
RewriteEngine On
RewriteRule ^([^.]+\.php)s$ $1 [H=application/x-httpd-php-source,NC]
</VirtualHost>

关于apache - 设置自定义处理程序时重定向失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861580/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com