标签: rewrite

浏览器应使用此 DNS 配置显示什么 URL?

如果我在 DNS 中有以下记录:

hostname               Record Type         address
benmccormack.com       A                   216.10.244.61
www.benmccormack.com   CNAME               benmccormack.com
Run Code Online (Sandbox Code Playgroud)

当用户输入http://benmccormack.com时,他们希望在浏览器的地址栏中看到什么?http://www.benmccormack.com怎么样?我原以为我会在地址栏中看到http://www.benmccormack.com更改为http://benmccormack.com,但也许我误解了 CNAME 记录应该如何工作。

(注意:我大约 15 分钟前刚刚更新了我网站的 dns,所以可能这些更改还没有传播。)

domain-name-system rewrite url cname-record url-routing

6
推荐指数
2
解决办法
6805
查看次数

对于带有乘客的 Rails 子目录中的页面缓存,我的 Nginx 重写规则应该是什么?

我使用的是 Nginx 0.7.64、Passenger 2.2.9、Rails 2.3.5。我将我的页面缓存目录设置为 /public/cache,并且我希望能够在通过 HTTP 请求时提供缓存页面,但在通过 HTTPS 请求时总是点击 Rails 应用程序。

我的大部分配置如下所示:

server {
  listen 80;
  server_name website.com www.website.com;
  proxy_set_header X-Forwarded-Proto http;
  root /home/deploy/website/current/public;
  passenger_enabled on;

  if (-f $document_root/cache/$request_filename.html) { 
    rewrite (.*) $document_root/cache/$1.html break;
  }
}

server {
  listen       443;
  server_name website.com www.website.com;
  root /home/deploy/website/current/public;
  passenger_enabled on;
  proxy_set_header X-Forwarded-Proto https;

  ssl                  on;
  ssl_certificate      /home/deploy/website/shared/ssl/www.website.com.combined.crt;
  ssl_certificate_key  /home/deploy/website/shared/ssl/www.website.com.key;
}
Run Code Online (Sandbox Code Playgroud)

我预计当我请求 website.com/about 时,我应该得到 /public/cache/about.html 的服务,但我却访问了 Rails 服务器(尾随日志显示了它)。

认为我可能有一个不合适的斜线(并且$document_root在大多数示例中没有看到),我还尝试了以下所有变体,但没有一个有效:

if (-f cache$request_filename.html) { 
  rewrite (.*) cache$1.html break;
}

if (-f /cache$request_filename.html) …
Run Code Online (Sandbox Code Playgroud)

rewrite nginx ruby-on-rails phusion-passenger

6
推荐指数
1
解决办法
3371
查看次数

Apache 2.2 重写 - 强制所有请求到 index.html

我需要强制所有请求,不管它们是什么 index.html。不幸的是,我尝试过的一切都没有正常工作。

以下在我看来应该可以工作,但没有。我的理解是,它表示任何不以 /index.html 结尾的内容都可以实际请求 index.html 文件。

重定向 302 !^/index.html http://www.example.com/index.html

任何帮助/澄清将不胜感激。

rewrite redirect apache-2.2

6
推荐指数
2
解决办法
4万
查看次数

使用 .htaccess 使用多个参数重写 URL

我有四种不同类型的重写,我试图在每个重写中使用多个参数。

首先是没有修改的网址:

http://www.example.com/index.php?p=/category/page-slug&pn=2/
http://www.example.com/index.php?p=/category/&f=feed/rss (feed, feed/, feed/rss, feed/atom are the only possible values for the f parameter)
http://www.example.com/index.php?p=tag&t=tag-one+tag-two+-tag-three&pn=2/
http://www.example.com/index.php?p=search&q=search+query+goes+here&pn=2/
Run Code Online (Sandbox Code Playgroud)

接下来,我希望能够在浏览器中输入:

http://www.example.com/category/page-slug/2/
http://www.example.com/category/feed/rss 
http://www.example.com/tags/tag-one+tag-two+-tag-three/2/
http://www.example.com/search/search+query+goes+here/2/
Run Code Online (Sandbox Code Playgroud)

最后,我尝试过的,以及无数的变化:

RewriteRule ^([a-zA-Z0-9-/+]+)([0-9]+)$ index.php?p=/$1&pn=$2/ [L]
RewriteRule ^([a-zA-Z0-9-/+]+)([a-zA-Z/]+)$ index.php?p=/$1&f=$2/ [L]
RewriteRule ^([a-zA-Z0-9-/+]+)([a-zA-Z/]+)([0-9]+)$ index.php?p=/$1&t=$2&pn=$3/ [L]
RewriteRule ^([a-zA-Z0-9-/+]+)([a-zA-Z/]+)([0-9]+)$ index.php?p=/$1&q=$2&pn=$3/ [L]
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法很好地处理 p 参数:

RewriteRule ^([a-zA-Z0-9-/+]+)$ index.php?p=/$1 [L]
Run Code Online (Sandbox Code Playgroud)

然而,其他一切都完全脱离了我。我觉得我已经很接近了,但这令人非常沮丧,因为我不知道有什么方法可以缩小问题的范围。它要么有效,要么无效。提前致谢。

rewrite .htaccess

6
推荐指数
1
解决办法
4万
查看次数

包含 + 字符的 URL 的 IIS7 URL 重写中断

我有一个 IIS7 服务器,它充当其他几个 Web 服务器的反向代理。其他服务器在不同的端口上运行,因此 IIS7 服务器提供“友好 URL”,并且所有端口都在 80 端口上。URL 重写用于将请求传递给后端服务器。

其中一种服务器是 TeamCity(持续集成和构建服务器)。该服务器提供了一种下载构建结果(“构建工件”)的方法。通常,这些工件是 zip 存档。这是一个示例网址:

http://build.teamserver.tigranetworks.co.uk/repository/download/bt25/4164:id/ASCOM+Telescope+Driver+for+AWR+6.0.40.825.zip

中的 + 字符ASCOM+Telescope+Driver+for+AWR+6.0.40.825.zip实际上是最终文件名中的空格;TeamCity 服务器放入 + 字符。

单击此链接时,我从 IIS7 服务器收到以下错误:

404 - 未找到文件或目录。

您要查找的资源可能已被删除、更名或暂时不可用。

IIS7 日志文件中出现的实际 URL 是:

/repository/download/bt25/4164:id/ASCOM+Telescope+Driver+for+AWR+6.0.40.825.zip

重写规则匹配模式(.*)并使用

http://localhost:8022/ {R:1}

现在是有趣的事情。如果我回到我的浏览器并编辑掉那些 + 字符,小心地用空格替换它们,那么 URL 就可以工作了!

我的结论是 URL 重写在某种程度上不适用于那些 + 字符。这是一个已知的问题?有什么建议?

iis rewrite iis-7.5

6
推荐指数
2
解决办法
7455
查看次数

如何使虚拟主机 DirectoryIndex 文件出现在 url 中?

我已经设置了一个虚拟主机,它指定了在调用 URL 时要加载的默认文件。

我遇到的问题是我需要该默认 DirectoryIndex 文件出现在 URL 中。

因此,当我访问:www.mysite.co.uk 时,我希望 www.mysite.co.uk/app.php 出现在 URL 中。

如何使用我的 apache.conf 文件中的虚拟主机配置来实现这一点?

这是我当前的代码:

<VirtualHost *:80>
ServerName *.mysite.co.uk
DocumentRoot "/var/www/html/mysite/web/"
DirectoryIndex app.php
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

rewrite virtualhost directoryindex apache-2.2

6
推荐指数
1
解决办法
4万
查看次数

使用 nginx 重写规则出现“重定向过多”错误

我正在尝试重写针对我的站点的域 url,以便将所有域名重写为 www.example.com 并具有以下配置:

我的网站块

  server {      
        listen       80 default_server;
        listen   [::]:80 default_server ipv6only=on;

            server_name _;
            rewrite ^ $scheme://www.example.com$request_uri permanent;

    location / {

            # Allow for large file uploads
              client_max_body_size 0;

                proxy_http_version 1.1;
                proxy_pass http://mysite;
                proxy_buffering    off;

                proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header   X-Scheme $scheme;
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   Host $http_host;
    }
}
Run Code Online (Sandbox Code Playgroud)

tomcat 服务器块

server {
        listen        80;

        root /opt/site2/www;
        index index.html index.htm;

        # Redirecto root requests to Share
        rewrite ^/$ /share;

        location / {
            # First attempt to serve request …
Run Code Online (Sandbox Code Playgroud)

rewrite nginx reverse-proxy redirect 301-redirect

6
推荐指数
1
解决办法
5万
查看次数

根据 url 将流量重定向到不同的 ip 地址,维护端口和 url 信息

我们有 QA 版本、UAT 版本和 webapp 的 DEV 版本。用户需要通过访问这些http://uat.company.com:41002/webapphttp://qa.company.com:41002/webapphttp://dev.company.com:41002/webapp。在端口 41001 和端口 8080 上还有一个不同的 webapp,它们需要访问。

这些 url 必须在公司外部可用,而且我们只有一个可以访问它们的公共 IP 地址。因此,DNS 记录需要所有 3 个地址指向一个 IP。在那个单一的 IP 地址上,有一台服务器运行着 nginx。在后台,我需要每个 url 指向不同的服务器

http://uat.company.com --> 123.123.123.1
http://qa.company.com  --> 123.123.123.2
http://dev.company.com --> 123.123.123.3
Run Code Online (Sandbox Code Playgroud)

恐怕我不知道正确的术语,但是 URI 的其余部分和端口也必须转移到 IP 地址。即如果有人访问

http://uat.company.com:41002/webapp/somepage`
Run Code Online (Sandbox Code Playgroud)

看起来好像那是他们访问过的页面,但实际上他们会查看

http://123.123.123.1:41002/webapp/somepage
Run Code Online (Sandbox Code Playgroud)

或者如果他们访问过

http://qa.company.com:8080/static/home.html
Run Code Online (Sandbox Code Playgroud)

他们真的会看

http://123.123.123.2:8080/static/home.html
Run Code Online (Sandbox Code Playgroud)

但他们的浏览器仍然会说 http://qa.company.com:8080/static/home.html

我试过了

server {

    server_name uat.company.com;

    listen 41001;
    listen 41002;
    listen 8080;

    location / {
            proxy_pass http://123.123.123.1:$server_port$uri;
            proxy_set_header Host $host;
    }
Run Code Online (Sandbox Code Playgroud)

}

但是,这给了我一个带有日志的错误网关 502 页面: …

rewrite nginx proxy proxypass

6
推荐指数
2
解决办法
3万
查看次数

根据 %{REQUEST_URI} 设置标头

我正在尝试根据特定页面的 URI 设置标题。

我使用 chrome 访问页面。检查元素并查看我的 URI 标头是否给出了值 /bst/index.html 现在在我的 Apache 配置中,如果我的 %{REQUEST_URI} 等于 /bst/index.html,我想将 Header 设置为 Yes我在做 :

RewriteCond %{REQUEST_URI} ^\/bst\/index\.html [NC]
Header set X-Akamai Yes
Run Code Online (Sandbox Code Playgroud)

上面的配置不起作用,并且正在为我在网页上访问的所有页面设置 X-Akami。

知道为什么吗?

mod-rewrite rewrite apache-2.2

6
推荐指数
1
解决办法
9287
查看次数

Apache 的 mod_rewrite 和 PHP 的 REQUEST_URI 变量

我有一个问题,ApachePHP $_SERVER['REQUEST_URI']在 URL 被重写而不是原始请求后将 URL传递给变量。

我正在做这个重写,因为我有一个 WordPress 网站,想把它移动到一个子目录而不是把它放在根路径中,但仍然想保持它的 URL 作为根 URL。

这不会一直发生。如果我请求www.xyz.com/wp-admin它填充 PHPREQUEST_URI变量www.xyz.com/wordpress/wp-admin(这是重写后的 URL),但如果我请求www.xyz.com/wp-admin/(带有尾部斜杠),它实际上填充 PHPREQUEST_URI变量www.xyz.com/wp-admin/(重写之前的原始 URL)。我想要的是REQUEST_URI在重写之前用 URL 填充。

我的.htaccess文件如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?xyz.com$
RewriteCond %{REQUEST_URI} !^/wordpress/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wordpress/$1
RewriteCond %{HTTP_HOST} ^(www.)?xyz.com$
RewriteRule ^(/)?$ wordpress/index.php [L]
</IfModule>`
Run Code Online (Sandbox Code Playgroud)

PHP 版本是 5.3。Apache 版本是 2.4 (Win32)。


更新:我查看了更多,当我输入 URL 时,www.xyz.com/wp-admin首先会有一个 301 重定向,www.xyz.com/wordpress/wp-admin/但这不会发生 …

php mod-rewrite rewrite apache-2.4 apache2

6
推荐指数
1
解决办法
3110
查看次数