如果我在 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,所以可能这些更改还没有传播。)
我使用的是 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) 我需要强制所有请求,不管它们是什么 index.html。不幸的是,我尝试过的一切都没有正常工作。
以下在我看来应该可以工作,但没有。我的理解是,它表示任何不以 /index.html 结尾的内容都可以实际请求 index.html 文件。
重定向 302 !^/index.html http://www.example.com/index.html
任何帮助/澄清将不胜感激。
我有四种不同类型的重写,我试图在每个重写中使用多个参数。
首先是没有修改的网址:
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)
然而,其他一切都完全脱离了我。我觉得我已经很接近了,但这令人非常沮丧,因为我不知道有什么方法可以缩小问题的范围。它要么有效,要么无效。提前致谢。
我有一个 IIS7 服务器,它充当其他几个 Web 服务器的反向代理。其他服务器在不同的端口上运行,因此 IIS7 服务器提供“友好 URL”,并且所有端口都在 80 端口上。URL 重写用于将请求传递给后端服务器。
其中一种服务器是 TeamCity(持续集成和构建服务器)。该服务器提供了一种下载构建结果(“构建工件”)的方法。通常,这些工件是 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 重写在某种程度上不适用于那些 + 字符。这是一个已知的问题?有什么建议?
我已经设置了一个虚拟主机,它指定了在调用 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) 我正在尝试重写针对我的站点的域 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)
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) 我们有 QA 版本、UAT 版本和 webapp 的 DEV 版本。用户需要通过访问这些http://uat.company.com:41002/webapp,http://qa.company.com:41002/webapp和http://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 页面: …
我正在尝试根据特定页面的 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。
知道为什么吗?
我有一个问题,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/但这不会发生 …
rewrite ×10
apache-2.2 ×3
nginx ×3
mod-rewrite ×2
redirect ×2
.htaccess ×1
301-redirect ×1
apache-2.4 ×1
apache2 ×1
cname-record ×1
iis ×1
iis-7.5 ×1
php ×1
proxy ×1
proxypass ×1
url ×1
url-routing ×1
virtualhost ×1