【问题标题】:Apache RewriteRule - unable to match start of stringApache RewriteRule - 无法匹配字符串的开头
【发布时间】:2016-06-22 23:10:20
【问题描述】:

我正在尝试在 .htaccess 文件中使用正则表达式匹配一个 url。

我可以使用“$”匹配字符串的结尾,但是当我尝试使用“^”匹配字符串的开头时,RewriteRule 停止工作。

这是我的 .htaccess 文件:

RewriteEngine On
RewriteBase "/"

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule "^example-url$" "index.php"

没有“^”,正则表达式可以工作,但是太松散了。我已经摆弄了几个小时了,但是我不确定还有什么可以尝试的,因为这个非常基本的正则表达式在我尝试过的每个正则表达式测试器中都有效。

我最好的猜测是它与字符串的实际开头有关,但我不确定如何测试它,因为它应该在顶级域名之后以“/”开头”。

编辑: 将 .htaccess 移动到 html 文件夹使我所有的问题都消失了,上面的 .htaccess 文件现在可以正常工作了。非常感谢@Riad Loukili 和@P0lT10n 的帮助。

我猜我的问题是由我的虚拟目录的设置方式引起的。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    不确定但试试

    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^example-url$ index.php
    

    我在This .htaccess tester 上尝试过,效果很好。

    可能的解释:你已经指定了RewriteBase,不需要在正则表达式中以/开头。

    【讨论】:

    • 这就是问题所在,他试图匹配//example 而不是/example,因为他已经定义了RewriteBase
    • @Andrew 据我所知,RewriteBase 只影响“外部路径”,它与“内部路径”无关,所以如果你没有任何其他 Rewrite 条件,你可能只是删除RewriteBase 行并在uri 的开头添加一个/。不要犹豫,使用任何在线 .htaccess 测试仪测试您的 .htaccess。我希望这会有所帮助。
    • .htaccess 文件与 index.php 位于同一文件夹中?
    • @Andrew,不确定但试试RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^example-url$ html/index.php
    • @Riad Loukili @P0lT10n 我能够让它工作:RewriteEngine On RewriteRule ^html/example-url$ html/index.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2013-07-15
    • 2014-01-15
    • 2020-08-30
    相关资源
    最近更新 更多