标签: mod-rewrite

在线 mod_rewrite 测试工具

mod_rewrite 语句可能很难编写和调试,因此我需要一个轻量级的在线工具,使我能够即时测试我的RewriteCond,RewriteRule语句。

有这样的工具吗?

mod-rewrite debugging apache-2.2

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

.htaccess 有限制吗?

大家好。我只是想知道 Apache 2 的 .htaccess 文件是否有限制。我正在开发一个缓存插件,并认为使用 .htaccess 文件指向生成的静态 html 文件可能是个好主意。

那么,有人尝试过达到极限吗?.htaccess 可以在 5,000 个 mod_rewrite 规则下正常工作吗?10,000呢?20,000?我的一个朋友说他在一个有 40 万多个帖子的博客上工作。这会奏效吗?

谢谢,

~@kovshenin

mod-rewrite .htaccess

8
推荐指数
2
解决办法
7457
查看次数

mod_rewrite RewriteRule 中的相对替换

我想创建一个独立于网页安装位置的 mod_rewrite RewriteRule。我想在 .htaccess 文件中定义重写规则。让我们以此为例:

RewriteEngine on
RewriteRule ^(.*)\.html html.php
Run Code Online (Sandbox Code Playgroud)

使用此规则,我想将所有 *.html 请求映射到位于 Web 根目录中的 html.php 脚本。问题是,webroot 的公共基本 url 可以更改。因此,Web根目录可以位于http://www.somewhere.tld/或者在一些子目录http://www.somewhere.tld/foo/bar/

但是在重写规则中使用相对路径不起作用。所以我必须写其中之一:

/html.php (When web is located in root directory of the web)
/foo/bar/html.php (When web is located in foo/bar sub directory)
Run Code Online (Sandbox Code Playgroud)

或者我可以设置一个 RewriteBase 但我根本不想配置这个路径。我希望 apache 自动做正确的事情,这样我就可以将 web 复制到某个目录,它就可以工作,而无需告诉 web 所在的重写规则。我该怎么做。?

mod-rewrite .htaccess apache-2.2

8
推荐指数
2
解决办法
5589
查看次数

在所有传入 URL 上使用 Mod_rewrite 和身份验证

我需要确保我的网址(称为 www.domain.com)始终至少通过基本 HTTP 身份验证受到保护。此外,我想使用 mod_rewrite 将我的用户发送到我的服务器上运行的两个 OC4j 实例之一。我还想使用相同的身份验证保护我的 OC4j 管理面板(和其他管理类型的功能)。我将有 2 个用户,称他们为 admin(管理员可以访问 OC4j 实例和 OC4j 管理面板)和来宾(访客只能访问 OC4j 实例)。

所以,假设我有两个 OC4j 实例——instance_a 和 instance_b。instance_a 将在端口 8888 上运行,instance_b 将在端口 8889 上运行。当用户键入 www.domain.com/instance_a 时,我想首先确保它们已通过服务器的身份验证,然后我想使用 mod_rewrite 将请求代理到 www .domain.com:8888/instance_a。这将适用于 instance_b。同样,任何用户,管理员或访客,都可以访问这些实例。如果用户尝试直接进入 OC4j 管理面板,如果他们不是管理员用户,我想将他们踢出去。

我有一个看起来像这样的 VirtualHost 条目:

<VirtualHost *:80>
        ServerName www.domain.com
        CustomLog "/var/log/httpd/ic/access_log" "combined"
        ErrorLog "/var/log/httpd/ic/error_log"
        RewriteEngine on
        RewriteLogLevel 9
        RewriteLog "/var/log/httpd/rewrite_log"
        RewriteCond %{REMOTE_USER} !^guest$ [OR]
        RewriteCond %{REMOTE_USER} !^admin$
        RewriteCond %{REQUEST_URI} ^/instance_a.*$
        RewriteRule ^.*$ - [F,L]
        <LocationMatch "^/.*$">
                AuthType Basic
                AuthName "Please Login"
                AuthBasicProvider file …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite http-authentication apache-2.2

7
推荐指数
1
解决办法
3638
查看次数

Apache RewriteRule 和斜线 (%2F)

我有以下几点RewriteRule

RewriteRule ^like/(.+)$ ask.php/$1
Run Code Online (Sandbox Code Playgroud)

这适用于以下请求:

/like/someting+here/something+else
Run Code Online (Sandbox Code Playgroud)

但是对于路径部分之一包含转义斜杠 ( %2F) 的请求,服务器会吐出 404 Not Found 错误:

/like/one%2Ftwo+things/
Run Code Online (Sandbox Code Playgroud)

有没有什么办法解决这一问题?我尝试了两者[B][NE]标志(单独和一起),但没有任何效果。

编辑:我也试过:

RewriteRule ^like/ ask.php
# or
RewriteRule ^like/(.*) ask.php
Run Code Online (Sandbox Code Playgroud)

所以它不一定要匹配斜杠。它仍然无法正常工作。

mod-rewrite apache-2.2

7
推荐指数
2
解决办法
6892
查看次数

在 Apache 中,.htaccess 文件是否会覆盖 mod_rewrites 的 httpd.conf?

在我的 Apachehttpd.conf文件中,我在VirtualHost标签中有这个声明。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.shanestillwell.com$ [NC]
RewriteRule ^(.*)$ http://www.shanestillwell.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

而这在我的 .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

我的规则httpd.conf似乎被忽略了。规则是在.htaccess抹去httpd.conf重写规则吗?

mod-rewrite .htaccess apache-2.2

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

存在的文件出现 404 错误?

脚本向我的 URL 发出 GET 请求,如下所示:

http://mydomain.com/cgi-bin/uu_ini_status_audios.pl?tmp_sid=b742be1d131c4d32237a9f1fcdca659e&rnd_id=0.2363453360320319

但是,我立即收到了 404 返回:

The requested URL /cgi-bin/uu_ini_status_audios.pl was not found on this server.

但是该脚本存在于我的服务器上,我可以看到该文件!它具有正确的权限(我肯定给了它 777)。它也归我的 apache 用户所有,并且属于 apache 组。

我错过了什么??

感谢您对此的任何帮助!

更新

我以为它会是一个 htaccess(重写),但我不认为它是了。我尝试在其中放置一个 index.php 文件并尝试通过我的 URL 访问它,但我什至不能这样做!我试过这个:

http://mydoamin.com/cgi-bin/index.php- 同样的 404 错误!我在我的错误日志中得到了这个:

[Tue Sep 14 14:42:49 2010] [error] [client xx.xxx.xx.xxx] script not found or unable to stat: /var/www/vhosts/mydomain.com/cgi-bin
Run Code Online (Sandbox Code Playgroud)

访问日志文件:

xx.xxx.xx.xxx - - [14/Sep/2010:14:48:25 +0200] "GET /cgi-bin/index.php HTTP/1.1" 404 475 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9 (.NET CLR 3.5.30729)" …

mod-rewrite permissions url http-status-code-404 apache-2.2

7
推荐指数
1
解决办法
3万
查看次数

带有特殊字符的apache url/文件名

我有这个网址:

http://domain.com/wp-content/uploads/2012/10/Hvilke-vilkår-følger-med-når-du-bestiller-nyt-bredbånd.png

如果我 ftp/ssh 或只是浏览到该文件夹​​(apache 索引功能),我会看到该文件

Hvilke-vilkår-følger-med-når-du-bestiller-nyt-bredbånd.png

如果我点击 apache 索引中的链接,我可以看到该文件,但是,如果我复制 URL 并尝试直接浏览它,我会收到错误消息:

在此服务器上找不到请求的 URL /wp-content/uploads/2012/10/Hvilke-vilkÃ¥r-følger-med-nÃ¥r-du-bestiller-nyt-bredbÃ¥nd.png。

我的错误日志也说:

文件不存在:/wp-content/uploads/2012/10/Hvilke-vilk\xc3\xa5r-f\xc3\xb8lger-med-n\xc3\xa5r-du-bestiller-nyt-bredb\xc3\xa5nd。 PNG

mod-rewrite apache-2.2

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

现有文件的 RewriteCond 文件存在检查失败

我对这个重写规则有一个奇怪的场景:

RewriteCond img/$2/$3/$4/$1 -f
RewriteRule ^img/(([a-z0-9]{4})([a-z0-9]{4})([a-z0-9]{4})[a-z0-9]{28}\.\w+)$ img/$2/$3/$4/$1 [L]
Run Code Online (Sandbox Code Playgroud)

目录结构为(简化):

var/
  images/
    ..
  www/
    .htaccess
    img -> /var/images
Run Code Online (Sandbox Code Playgroud)

换句话说,图像存储在 webroot 之外的通用数据存储区域中,并img通过符号链接链接到 webroot 的目录中。图像名称是散列。为提高效率,它们存储在三级深层目录层次结构中。例如:

0a808e34edaaeeffd973e4138789a4957d6b6a26.jpg
Run Code Online (Sandbox Code Playgroud)

存储在

images/0a80/8e34/edaa/0a808e34edaaeeffd973e4138789a4957d6b6a26.jpg
Run Code Online (Sandbox Code Playgroud)

重写规则只是将文件名重写到嵌套目录结构中。

现在,奇怪的是它RewriteCond在我的本地系统上运行良好,但在测试服务器上却失败了。Apache 调试日志明确指出-f此条件的“模式不匹配”​​。如果我只是删除此条件,则重写规则可以正常工作并提供图像。

什么可能导致-f明显存在的文件失败?

FollowSymLinks被允许。通过 apt 安装的 Apache 版本 2.2.22-6ubuntu2 几乎没有修改。适用于 Apache 2.2.23 的本地安装(通过自制软件)。看不到应该导致这种情况的两个版本之间的任何重大变化


关于实际目录结构的一些可能更重要的细节:

$ ls -l /var/www/myapp/current
[snip] /var/www/myapp/current -> /var/www/myapp/releases/20130418090750

$ ls -la /var/www/myapp/current/webroot
[snip]
[snip] .htaccess
[snip] img -> /usr/local/var/myapp/images
Run Code Online (Sandbox Code Playgroud)

Apache webroot 配置为:

DocumentRoot /var/www/myapp/current/webroot
Run Code Online (Sandbox Code Playgroud)

如果我写RewriteCond为:

RewriteCond /usr/local/var/myapp/images/$2/$3/$4/$1 …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite apache-2.2

7
推荐指数
1
解决办法
3685
查看次数

如何将请求从一个 apache 服务器传递到另一个

我有两个启用了 mod_proxy 的 Apache 服务器。我想知道如何使用相同的端口 (80) 从“Apache Server A”“传递请求”到“Apache Server B”。

在内部 ip 为 192.168.0.5 的“服务器 A”中,我配置了 DNS,并将其用作我的邮件服务器。

在内部 IP 为 192.168.0.10 的“服务器 B”中,我有自己的云服务器。

今天,当我访问 wwww.mydomain.com 或 www.mydomain.com/webmail 时一切正常,因为内容都在“服务器 A”中,我需要的是当有人尝试访问 owncloud.mydomain.com 时,他们可以访问我的服务器 B没有将它们重定向到另一个端口,如 owncloud.mydomain.com:81,我只想使用端口 80。

实际上我得到了一个重定向循环,因为当我尝试重定向时,我猜“服务器 A”自己得到了相同的请求。我已将我的虚拟主机设置为在同一个“服务器 A”中工作,我想要的是使用相同的端口和 URL(owncloud.mydomain.com)“重定向”到另一台服务器。

我不想使用另一个端口重定向。

mod-rewrite reverse-proxy mod-proxy apache-2.2

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