重写逻辑破坏?

发布于 2024-09-16 18:31:30 字数 1148 浏览 2 评论 0原文

我的 vHost 中有以下重写逻辑,并且在重定向子域方面一切似乎都正常,但是一旦我添加 URI 的路径,我就会在 apache_error.log 中收到错误。

这是重写逻辑:

    RewriteEngine On

    # Remove the www alias
    RewriteCond %{HTTP_HOST} ^www\.13labs\.net$ [NC]
    RewriteRule ^(.+)$ http://13labs.net$1 [R=301,L]

    RewriteCond %{REQUEST_URI} ^.+$
    RewriteCond %{REQUEST_FILENAME} !\.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf)$ [OR]
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d [OR]
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^ - [L]

    RewriteCond %{HTTP_HOST} !^www\.13labs\.net$ [NC]
    RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.13labs\.net$ [NC]
    RewriteRule ^(.+)$ /index.php?subdomain=%2&kohana_uri=$1 [PT,L,QSA]

    RewriteRule ^(.+)$ /index.php?kohana_uri=$1 [PT,L,QSA]

我试图点击 admin.13labs.net/login,它应该重写为 13labs.net/index.php?subdomain=admin&kohana_uri=/login。但是,在我的 apache_error.log 中,我收到以下内容:

[Mon Aug 30 23:56:06 2010] [error] [client 74.63.151.37] File does not exist: /var/www/13labs.net/html/login

有任何线索吗?我已经玩了大约一个小时了,我很困惑......

问候, 安德鲁

I have the following rewrite logic in my vHost and everything seems to be working in regards to redirecting subdomains, but as soon as I add a path to the URI I'm getting an error in my apache_error.log.

Here is the rewrite logic:

    RewriteEngine On

    # Remove the www alias
    RewriteCond %{HTTP_HOST} ^www\.13labs\.net$ [NC]
    RewriteRule ^(.+)$ http://13labs.net$1 [R=301,L]

    RewriteCond %{REQUEST_URI} ^.+$
    RewriteCond %{REQUEST_FILENAME} !\.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf)$ [OR]
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d [OR]
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^ - [L]

    RewriteCond %{HTTP_HOST} !^www\.13labs\.net$ [NC]
    RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.13labs\.net$ [NC]
    RewriteRule ^(.+)$ /index.php?subdomain=%2&kohana_uri=$1 [PT,L,QSA]

    RewriteRule ^(.+)$ /index.php?kohana_uri=$1 [PT,L,QSA]

I am trying to hit admin.13labs.net/login, which should be rewriting to 13labs.net/index.php?subdomain=admin&kohana_uri=/login. However, in my apache_error.log I am receiving the following:

[Mon Aug 30 23:56:06 2010] [error] [client 74.63.151.37] File does not exist: /var/www/13labs.net/html/login

Any clues? I've been playing around with this for about an hour now and I'm stumped...

Regards,
Andrew

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑忘罢 2024-09-23 18:31:30

您的第二个重写规则(及其相应的条件)看起来会停止对任何 URL 的重写。如果文件没有正确的扩展名,或者不是文件,或者不是目录,或者不是链接,则它匹配。没有资源可以同时是文件、目录和链接,因此所有 URL 都将匹配 - 并且它们都将按原样传递,因为您的 [L] 标志会阻止任何后续重写。

如果您的目的是防止重写与现有文件、链接或目录对应的 URL,请从您的条件中删除 !,并从检查文件扩展名的条件中删除 [OR]。

Your second rewrite rule (with its corresponding conditions) looks like it'll stop rewrites for any URL. It matches if the file doesn't have the right extension, OR isn't a file, OR isn't a directory, OR isn't a link. No resource can be a file and a dir and a link at the same time, so all URLs will match -- and they'll all get passed as is, since your [L] flag prevents any subsequent rewrites.

If your intention is to prevent rewrites for URLs that correspond to existing files, links, or directories, remove the !'s from your conditions and remove the [OR] from the condition that checks the file extension.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文