【问题标题】:RewriteRule optional trailing slash issuesRewriteRule 可选斜杠问题
【发布时间】:2011-06-12 06:49:18
【问题描述】:

我正在与一个打开了永久链接的 wordpress 网站并行构建一个应用程序。因此,稍后在 htaccess 中还有其他重写来处理 wordpress 的所有方面。但是,我正在尝试在它到达之前执行一些我自己的重写。 - 当然在我的之后使用 [L]。 一切都很完美,直到我尝试在末尾添加允许斜线或不斜线的选项(并且仍然匹配)。

这是在此服务器上引发 500 错误的示例:

RewriteRule ^app/([^/]+)/?$ /app/$1\.php [L,QSA]

http://<domain>.com/app/login
or
http://<domain>.com/app/login/

但下面的工作很好,并且高于 htaccess 中的前一个示例。

RewriteRule ^app/p/([^/]+)/?$ /app/page.php?page_slug=$1 [L,QSA]

http://<domain>.com/app/p/styles
or
http://<domain>.com/app/p/styles/

我尝试了一些变化,但收效甚微。

RewriteRule ^app/([^/]+)/{0,1}$ /app/$1\.php [L,QSA]
and
RewriteRule ^app/([^/]+)[p]/[\p]?$ /app/$1\.php [L,QSA]

【问题讨论】:

    标签: apache mod-rewrite slash trailing


    【解决方案1】:

    这是因为您的目标位置/app/$1.php 与您的源位置^app/([^/]+)/?$ 完美匹配。所以页面被重定向到自己。

    RewriteCond %{REQUEST_URI} !\.php
    RewriteRule ^app/([^/]+)/?$ /app/$1.php [L,QSA]
    

    【讨论】:

    • 知道了!因此,在这种情况下,最后需要斜杠以使源与目标不同。似乎解决这个问题的唯一方法是选择一个不同的源名称......因为目标不能改变。
    • 只需像我的示例一样在规则前面添加 RewriteCond。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多