apache - 绕过单个 Apache 重写条件,但继续处理所有其他条件
问题描述
试图帮助朋友让他的 ProcessWire 站点正常运行。htacess 中有这样一行:
# PW-PAGENAME
# -----------------------------------------------------------------------------------------------
# 16A. Ensure that the URL follows the name-format specification required by PW
# See also directive 16b below, you should choose and use either 16a or 16b.
# -----------------------------------------------------------------------------------------------
RewriteCond %{REQUEST_URI} "^/~?[-_.a-zA-Z0-9/]*$"
他想从该单个特定条件中排除特定目录“/images/”,然后继续处理其他条件。
我尝试了很多不同的东西,但都没有奏效,但它似乎应该很简单,我应该知道该怎么做:-) 但我一辈子都想不通。
任何帮助将非常感激!
解决方案
RewriteCond 本身不做任何事情,它只是持有一个条件,该条件需要为真才能处理下一个 RewriteRule。.htaccess
这是ProcessWire中包含的更大的摘录(没有评论):
RewriteCond %{REQUEST_URI} "^/~?[-_.a-zA-Z0-9/]*$"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !(favicon\.ico|robots\.txt)
RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]
所有的 RewriteCond 指令只限制哪些请求被重写到 ProcessWire 的index.php
文件。即,ProcessWire 不会根据这些规则处理以下类型的请求:
- 非 ASCII 路径 (
[-_.a-zA-Z0-9/]*
),尽管您可以使用指令 16b来更改它。 - 现有文件和目录 (
!-f
,!-d
) - 一些特定的文件 (
!(favicon\.ico|robots\.txt)
)
您需要如何修改它取决于您希望如何处理图像文件夹中的文件。
Apache 提供静态文件
如果您只想让服务器直接处理图像目录中的图像,您可能不需要更改任何内容,因为现有 RewriteConds 已经排除了文件。
也就是说,如果您不希望任何以开头的路径/images/
由 ProcessWire 处理,请在 RewriteRule 之前添加另一个 RewriteCond,如下所示:
RewriteCond %{REQUEST_URI} !^/images/.*$
RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]
ProcessWire 提供静态文件
如果您希望images
文件夹中的图像由 ProcessWire 而不是服务器提供,则必须修改多个现有的 RewriteConds。使用仅匹配该特定路径的单独 RewriteCond 复制 RewriteRule 可能会更容易。以下指令(添加在现有 RewriteRule 后面)将重写所有以 开头的请求/images/
,允许由 ProcessWire 处理。
RewriteCond %{REQUEST_URI} ^/images/.*$
RewriteRule ^(.*)$ index.php?it=$1 [L,QSA]
推荐阅读
- asp.net - azure 连接字符串格式 - 在 azure 中添加
- css - 为 tr 和 td 设置不同的高度
- wordpress - wordpress 中的 get_term_by 名称不返回包含“&”的术语
- windows - 运行docker时偶尔长时间停顿
- ruby-on-rails - 进行 JSON 解析时的逗号分隔输出
- python - 我可以通过编程来避免 GPU 内存错误吗?像 cuMemAlloc 导致 CUDA_ERROR_LAUNCH_FAILED
- xml - xml 与 xsl 匹配行
- c# - C# Visual Studio 无法导入 System.Data.OleDb 库
- asp.net - 定义自定义路由 asp.net mvc5
- vba - 将合并数据从多个工作表复制到 .ActiveWorksheet