AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[mod-rewrite](server)

Martin Hope
Josh Hawkes
Asked: 2023-11-07 23:22:17 +0800 CST

Apache VHost 将 /dir/ 重定向到子域

  • 6

我的应用程序在以下变量链接上运行:

www.example.com/topics/vardir/show
www.example.com/education/topics/vardir/vardir/show
www.example.com/literacy/topics/vardir/show
www.example.com/literacy/topics/vardir/vardir/show

我不得不将它们移至子域:

www.subdomain.example.com/topics/vardir/show
www.subdomain.example.com/education/topics/vardir/vardir/show
www.subdomain.example.com/literacy/topics/vardir/show
www.subdomain.example.com/literacy/topics/vardir/vardir/show

www.example.com站点现在是一个 Wordpress 站点,运行 Lightsail Bitnami 。

我想使用重写规则更新www.example.com vhost 文件,以便访问旧链接的人被重定向到新的子域。

我已经有一个适用于变量链接的重写规则, ?elem=icon_file969最后重定向到子域:

www.domainname.com/education/topics/vardir/vardir/show?elem=icon_file969


 RewriteCond %{QUERY_STRING} (^|&)elem=[^&]+(&|$) [NC]
 RewriteCond %{HTTP_HOST} ^(?:www\.)?domainname\.com$ [NC]
 RewriteRule ^/?[^/]+/[^/]+/[^/]+/[^/]+/show/?$ https://subdomain.domainname.com%{REQUEST
_URI} [R=301,L,NC,NE]

任何帮助,将不胜感激。

mod-rewrite
  • 1 个回答
  • 60 Views
Martin Hope
eos
Asked: 2023-02-01 06:42:20 +0800 CST

mod rewrite - 连续规则使用原始的还是重写的 url?

  • 5

如果您有两个重写规则,并且第一个被应用,第二个是使用第一个的重写结果还是原始 URL?我无法在文档中找到此信息。

mod-rewrite
  • 1 个回答
  • 14 Views
Martin Hope
tomas
Asked: 2023-01-31 08:47:59 +0800 CST

mod_proxy + mod_reqrite 导致错误 502 或 502

  • 5

我有将请求转发给代理的工作 httpd 配置(反向代理):

Listen 443 https

<VirtualHost *:443>
    ServerName  public-dns.example.org
    ServerAlias internal-hostname.internal

    ProxyPreserveHost On

    RewriteEngine On

    #check & block some URLs in target service
    RewriteCond %{REQUEST_URI} ^/service
    RewriteRule /service(/(api(/(([a-zA-Z_-]+)(/|/.*swagger.*)?(\.\.)?)?)?)?)?$ - [F,L]

    <Location "/service/api/">
      ProxyPreserveHost Off
      ProxyErrorOverride Off
    </Location>

    ProxyPass /service/api/ https://services.apps.cloud.example.internal/

    ProxyErrorOverride On

    SSLProxyEngine On
#START - avoid unnecessary checks in internal network - development environment
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
#END - avoid unnecessary checks in internal network - development environment

#START - not relevant part of config (for this question)
    SSLEngine On
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLProtocol All -SSLv2 +TLSv1.2
    SSLCipherSuite HIGH:!aNULL:!MD5
    SSLHonorCipherOrder On

    SSLCompression off
    SSLSessionTickets Off
    SSLCertificateFile      /etc/ssl/certs/apache-selfsigned.crt
    SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
#END - not relevant part of config (for this question)
</VirtualHost>

我想丰富对上游服务器的请求——添加一个查询字符串参数,但我什至在应用 rewriteRule 并将其转发给代理时遇到问题。

由于服务使用另一个查询字符串参数,我发现 mod_rewrite 标志 QSA 应该处理 ?/& 正确...

当我添加这组重写规则时,所有 rewriteRules 尝试都失败并出现相同的 502 代理错误。

根据 error_log,mod_proxy 似乎没有根据上面定义的 ProxyPass 指令转发它。

    #test - adding query parameter to proxy request

    RewriteCond %{REQUEST_URI} ^/service
# attempt 1 failed - match all under the rewriteCond "^/service", add "queryStringParam" and apply flags QSA & P (proxy)
#    RewriteRule ^(.*)$ $1?queryStringParam=example [QSA,P]
# attempt 2 failed - try the same without QSA
#    RewriteRule ^(.*)$ $1 [P]
# attempt 3/4 failed - try absolute url in target url 
#    RewriteRule ^(.*)$ %{REQUEST_SCHEME}://%{HTTP_HOST}$1?queryStringParam=example [QSA,P]
#    RewriteRule ^(.*)$ %{REQUEST_SCHEME}://%{HTTP_HOST}$1 [P]

所有尝试均因代理错误 (http 502) 而失败:

The proxy server received an invalid response from an upstream server. 
The proxy server could not handle the request "GET /services/api/example-service/list/".

你能给我指出正确的方向吗?谢谢

mod-rewrite
  • 1 个回答
  • 17 Views
Martin Hope
halloleo
Asked: 2022-04-01 20:08:03 +0800 CST

在 Apache 上,如何仅针对对特定子域的请求关闭 DirectorySlash?

  • 1

由 Apache 提供服务我希望在我的一个子域站点(例如sub.mydomain.com)上,没有尾部斜杠的 URL 直接(没有外部重定向)指向底层文件夹中的索引文件。子域请求在内部重定向到子文件夹。所有其他 URL 应该以正常的 Apache 方式工作,外部重定向到斜线版本。

所有指令都必须放在我的 .htaccess 文件中。为此,我计划执行以下操作:

  1. 关闭DirectorySlash请求sub.mydomain.com/...
  2. sub.mydomain.com/…将请求重写为/sub/...
  3. 重写无斜杠目录 URL /sub/...以获取index.html底层目录内部

我对如何执行 2. 和 3. 有一个好主意,但是我如何才能DirectorySlash off 仅针对请求sub.mydomain.com而不是www.mydomain.comor发出请求other.mydomain.com?

rewrite .htaccess mod-rewrite apache-2.4
  • 1 个回答
  • 52 Views
Martin Hope
Totoro
Asked: 2022-03-17 12:32:11 +0800 CST

试图让 Apache 服务于 webp 而不是 png/jpg(来自 prestashop 的 /img 文件夹)

  • 1

第一次在这里发帖,所以我希望我做得很好。

我从我的 prestashop public_html 文件夹开始将所有 png/jpg 转换为 webp,并向 .htaccess 添加了重写规则,以便提供 webp 而不是 png/jpg。

我的重写基于已经存在的 prestashop 重写。我在哪里:
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]
我最终做了:

RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.webp [L]
RewriteRule ^([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ %{ENV:REWRITEBASE}img/p/$1/$1$2$3.jpg [L]

哪个有效:我得到了提供 webp 图像的 jpg URL,到目前为止一切都很好(我知道仍然需要实现

#RewriteCond %{HTTP_ACCEPT} image/webp
#RewriteCond %{DOCUMENT_ROOT}/$1.webp -f

并且尝试弄清楚我是否应该离开[L]或做[L,T=image/webp]或做[T=image/webp,E=REQUEST_image],这就是为什么我正在阅读与 apache 相关的文档并在网络上爬取关于重写相关主题的内容,这确实是巨大的。

好的,回到主题,我发现我缺少对 prestashop 存储在 public_html/img 文件夹中的图像的 webp 重写。

然后我尝试了以下(以及其他变体):

RewriteRule ^/img/(.+)\.jpe?g$ /img/$1.webp [L]
RewriteRule ^/img/(.+)\.png$ /img/$1.webp [L]

^--- 不好...仍然从 img 目录提供 jpg/png 类型的图像(仔细检查 MIME 类型)。

注意:

  1. 每次我更改 .htaccess 并尝试解决方案时,我都会清除 prestashop 缓存,以防万一(尽管知道每次请求都会读取 .htaccess)。
  2. 存在 img 文件夹中 jpg/png 对应的 webp 图片。
  3. 图像文件 perms 在 img 文件夹中是正确的,实际上在 public_html 下的所有东西中都是正确的
  4. 在 prestashop 的 img 文件夹中,还有另一个 .htaccess,它限制了可以从此文件夹提供的文件类型,我已经添加了 webp,以防万一有人问。

更新:根据 MrWhite 的要求,添加 img 文件夹的 .htaccess

<IfModule mod_php5.c>
    php_flag engine off
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order deny,allow
    Deny from all
    <Files ~ "(?i)^.*\.(webp|jpg|jpeg|gif|png|bmp|tiff|svg|pdf|mov|mpeg|mp4|avi|mpg|wma|flv|webm|ico)$">
        Allow from all
    </Files>
</IfModule>

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
    <Files ~ "(?i)^.*\.(webp|jpg|jpeg|gif|png|bmp|tiff|svg|pdf|mov|mpeg|mp4|avi|mpg|wma|flv|webm|ico)$">
        Require all granted
    </Files>
</IfModule>

请问你们能帮我吗?

rewrite .htaccess extension mod-rewrite images
  • 1 个回答
  • 536 Views
Martin Hope
Jeff
Asked: 2022-03-05 14:48:12 +0800 CST

将许多 VirtualHosts 合并到一个块中,这是 SetEnvIf 的工作吗?

  • 1

编辑我认为我需要的是SetEnvIf

为了方便起见,我试图将我所有的端口 80 虚拟主机合并到一个块中,但我正在努力解决最后一块难题。

所有端口 80 的虚拟主机都接受一个www和non-www连接到/.well-known/acme-challenge/. 所有其他请求 301 到https://example.com/ - 没有 www。

我想我需要%{HTTP_HOST}变成一个可以定义的变量减去可能的“www”,例如${SITE}。

或者也许有更好的方法?

这是我目前所处的位置:

<VirtualHost ${IP1}:80>
    Define SITE hmmm
    ServerName example-1.com
    ServerAlias www.example-1.com
    ServerAlias example-2.com
    ServerAlias www.example-2.com
    # And so on... 25 vhosts
    DocumentRoot /home/user/htdocs/${SITE}

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule ^ https://${SITE}%{REQUEST_URI} [NE,R=301,L]

    <Directory /home/user/htdocs/${SITE}>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
virtualhost mod-rewrite apache-2.4
  • 1 个回答
  • 54 Views
Martin Hope
kubi
Asked: 2022-03-05 01:01:10 +0800 CST

如果存在斜杠,RewriteRule 将不匹配,抛出 nginx 404

  • 1

有了这个.htaccess...

RewriteEngine on
RewriteRule ^foo$ foo.php
RewriteRule ^foo/$ foo.php

...当我请求时,我得到以下行为

  • /foo— 工作,我得到 foo.php
  • /foo/— 来自 nginx 的 404 意外失败
  • /foobar- 失败,正如预期的那样,但是来自 nginx 的漂亮的 404 ErrorDoc

注意:不存在文件夹foo。

我是否遗漏了什么,或者这是托管服务提供商的错,比如 nginx 代理配置错误?在不同的 apache 上,此设置按预期工作。
(我试图深入了解为什么 WordPress 的(默认方式) .htaccess 不起作用。)

.htaccess mod-rewrite
  • 1 个回答
  • 92 Views
Martin Hope
argyrodagdileli
Asked: 2022-02-11 06:53:22 +0800 CST

代理 api 子目录时出现 Apache 500 错误

  • 1

我正在尝试将对特定端点的 PUT 请求重定向到另一台主机。

所述端点位于/internal并仅接受 PUT 请求。下面的其他端点/internal将继续由我的主主机/服务器提供服务。

我已经尝试使用重写规则和使用代理([P])标志和使用ProxyPass指令来设置它 - 所有这些都会导致 500 内部服务器错误,并且请求永远不会到达新主机

我的客户端应用程序使用无法处理重定向的简单 REST 客户端,因此我必须使用某种代理。

Apache 日志显示以下内容

[Thu Feb 10 08:56:20.394444 2022] [rewrite:trace1] [pid 8579] mod_rewrite.c(480): [client XXX.XXX.XXX.XXX:XXXXX] XXX.XXX.XXX.XXX - - [subdomain1.mydomain.com/sid#55d4ed07ecb0][rid#55d4ed2c5f20/initial] go-ahead with proxy request proxy: https://subdomain2.mydomain.com/internal/my-endpoint [OK]

这是特定虚拟主机的当前配置

<VirtualHost *:80>
 ServerName subdomain1.mydomain.com
  ProxyPass /soap ajp://localhost:7007/soap retry=3
  ProxyPreserveHost On
  Redirect /  https://subdomain1.mydomain.com/
  ErrorLog /var/log/httpd/subdomain1_error
</VirtualHost>

<VirtualHost *:443>
  ServerName subdomain1.mydomain.com
  Options FollowSymlinks
  ProxyRequests On
  ProxyPreserveHost On
  #RewriteEngine On

  #RewriteCond %{REQUEST_URI} '^/internal/my-endpoint'
  #RewriteCond %{REQUEST_METHOD} ^(PUT)
  #RewriteRule "^/(.*)" "https://subdomain2.mydomain.com/internal/my-endpoint" [P]

  ProxyPass /internal/my-endpoint https://subdomain2.mydomain.com/internal/my-endpoint
  ProxyPassReverse /internal/my-endpoint https://subdomain2.mydomain.com/internal/my-endpoint
  ProxyPreserveHost On

  LogLevel alert rewrite:trace3
  CustomLog /var/log/httpd/subdomain1_access_log common
  ProxyPass / ajp://localhost:7007/ retry=3
  ProxyPassReverse / ajp://localhost:7007/ retry=3
  ProxyPreserveHost Off
  ErrorLog /var/log/httpd/subdomain1
  SSLEngine on
</VirtualHost>
proxy mod-proxy mod-rewrite apache-2.4 500-error
  • 1 个回答
  • 104 Views
Martin Hope
Adam Larsson
Asked: 2022-01-31 06:23:31 +0800 CST

Apache http 到 https 没有任何地址?

  • 1

正常的 http 到 https 重写可能如下所示:

RewriteEngine On
# RewriteCond %{HTTP_HOST} !^example.com$
# RewriteRule /.* https://example.com/ [R]

但是此代码将站点指定为“example.com”

无论如何要进行“全局”重写,因此无论是否有人打开example.com、broken.example.com 甚至example.Lom(只要 DNS 指向服务器),它都会简单地放一个 https在上面?

适用于拥有多个域名的服务器。

能够在任何地方使用相同的代码会很棒..

rewrite mod-rewrite rewritecond
  • 1 个回答
  • 42 Views
Martin Hope
Darrell Brogdon
Asked: 2022-01-23 18:16:19 +0800 CST

如何使 mod_rewrite 强制重定向?

  • 1

我需要将我的网站临时重定向到托管在 Cloudflare 上的静态版本。当前站点是托管在 Ionos 的 Wordpress 站点,Wordpress 似乎正在执行从mydomain.comto的 301 重定向www.mydomain.com。我希望能够通过转到继续访问 Wordpress 实例,www.mydomain.com但如果我(或其他任何人)转到mydomain.com我希望被重定向到static.mydomain.com.

我把它放在我的.htaccess文件中:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain.com
RewriteCond %{HTTP_HOST} !^www.mydomain.com
RewriteRule ^(.*) https://static.mydomain.com/$1 [R=302,L]
</IfModule>

但是,当我访问时,mydomain.com我仍然被重定向到www.mydomain.com,所以似乎 .htaccess RewriteRule 没有被触发,所以 Wordpress 正在执行它的重定向。

.htaccess 中是否有某种方式(我无权访问 Apache 配置文件)来强制重定向,就像我描述的那样?

.htaccess mod-rewrite apache2
  • 1 个回答
  • 50 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve