【问题标题】:Having Some Error With Htaccess when i adding dot operator to it向 Htaccess 添加点运算符时出现一些错误
【发布时间】:2023-03-28 06:22:01
【问题描述】:

我有两个文件,一个是 php handler.php 文件,第二个是 htaccess,在没有 .(dot) 的情况下可以正常工作,但是当我们将 dot 添加到它的只是 echo handler.php

book/handler.php 存在于 book 目录中

<?php
echo $_GET['bookid'];
?>

.htaccess

RewriteEngine On

# i added 2 line one for book/abc and secon for book/abc/

RewriteRule ^book/([a-z-A-Z-0-9-.]+)$ book/handler.php?bookid=$1 [L,R=301]


RewriteRule ^book/([a-z-A-Z-0-9-/]+)/ book/handler.php?bookid=$1 [L,R=301]

当我提交 localhost/book/handler.php?bookid=somthing.php 它返回 handler.php

查看此网址进行演示 link 当我添加 book/somthing 或 book/somthing.php 它返回 handler.php

【问题讨论】:

  • 用户是否将localhost/book/handler.php?bookid=somthing.php 放入浏览器或其内部重定向从一个内部网址到另一个?因为通常推荐给用户用户友好的url,请确认一次。

标签: regex apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

您能否尝试以下操作,仅基于您显示的示例。

RewriteEngine ON
RewriteCond %{REQUEST_URI} !/handler\.php [NC]
RewriteCond %{THE_REQUEST} /book/([^\s]*)\s+ [NC]
RewriteRule ^(.*)$ /book/handler.php?%1 [NE,NC,L]

解释:

  • RewriteEngine ON:在此处设置RewriteEngine,以便启用模组重写规则。
  • RewriteCond %{REQUEST_URI} !/handler\.php [NC]:为了避免在此处循环,以便一旦发生重定向,它应该在此失败,而在成功重定向之后。
  • RewriteCond %{THE_REQUEST} /book/([^\s]*)\s+ [NC]:在默认变量 THE_REQUEST 中使用正则表达式匹配字符串 book 将所有内容保存到第一个反向引用中,以便稍后在重定向部分中使用。
  • RewriteRule ^(.*)$ /book/handler.php?%1 [NE,NC,L]:通过在此处传递值为第一个反向引用的/book/handler.php 执行实际重定向(内部重定向)。使用标志 NENCL 使重定向更顺畅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多