【问题标题】:Dealing with trailing slashes in htaccess处理 htaccess 中的斜杠
【发布时间】:2016-04-22 12:24:20
【问题描述】:

mod_rewrite 上有相当多的内容可用,但我根本无法让以下内容正常工作。

现在我的 htaccess 文件中有以下代码:

RewriteEngine On
Options -Indexes
Options -Multiviews
ErrorDocument 400 http://localhost/mywebsite/400.php
ErrorDocument 403 http://localhost/mywebsite/403.php
ErrorDocument 404 http://localhost/mywebsite/404.php
ErrorDocument 500 http://localhost/mywebsite/500.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]

这将成功地使 mywebsite/index 之类的东西工作(而不是 mywebsite/index.php)。 但是,在某些情况下,我的访问者将使用尾部斜杠(mywebsite/index/)访问该站点,然后我的重写不再起作用。我收到一个错误页面。

那么我将如何使它工作,以便任何带有斜杠、没有斜杠或扩展名 (.php) 的页面都可以在我的网站上工作?

我会补充一点,这是在 apache 服务器 (XAMPP) 上的 localhost 上,以防这会影响 mod_rewrite 的工作方式。

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    用这个替换你的代码:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule (.*) $1.php [L]
    

    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ([^/]+)/?$ $1.php [L]
    

    【讨论】:

    • 这使得两个 URL 都带有斜杠并且没有故障(使用后只有带扩展名的 URL 才有效)
    • 给了我一个 404 错误页面。它不起作用的事实让我想知道我是否错过了 apache 服务器中的设置,这将是非常奇怪的,因为原始代码除了尾随空格之外的任何东西都可以正常工作。
    • @Bucketman 我认为 mod-rewrite 没有正确读取你的 %{DOCUMENT_ROOT} 的值,你可以用你的文档根替换 %{DOCUMENT_ROOT} 来测试这个例子,即:var/www/etc
    • 好吧,我找到了问题所在。 DOCUMENT ROOT 与项目根目录不同(可能是由于 xampp 设置)。 %{DOCUMENT_ROOT}/mywebsite/$1.php 工作!不幸的是,现在它不再加载 css,但至少我现在可以继续前进。感谢所有的帮助。
    【解决方案2】:

    你可以使用:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (.+)/?$ $1.php [L]
    

    因为之前无法测试文件(不带 /)是否存在。

    【讨论】:

    • 在尝试使用带有斜杠的mywebsite/index/ 时,我仍然收到错误 500 页面。如果相关,我会补充说这是在本地主机上,以防万一影响它。
    【解决方案3】:

    这样的重写规则应该可以解决问题:

    RewriteRule ^(.*)/?$ $1.php [L]
    

    【讨论】:

    • 我用你的 RewriteRule 替换了我的 RewriteRule,但尾部的斜杠仍然给我一个错误 500 页。
    • 您的日志说 500 错误是由什么引起的?你没有得到 404 让我觉得发生了其他事情。
    • [core:error] [pid 10648:tid 1840] [client ::1:17180] AH00124:由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多