我正在做一个项目,我正试图在我的网站根URL重写.现在的.htaccess人如下

RewriteEngine On 
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]

RewriteRule ^screenshot-of-the-week/screenshot/([^/]+) /screenshot-of-the-week/screenshot/index.php?id=$1

在我的网站上启用了重写.我已经通过htaccess tester判断了代码,它显示了正确的值.

然而,当我访问screenshot-of-the-week/screenshot/123作为一个例子时,我得到了一个404的页面.当我访问screenshot-of-the-week/screenshot/时,它运行得很好.

此外,当手动转到"真正的"URL时,它也会像预期的那样工作:screenshot-of-the-week/screenshot/index.php?id=123

我似乎找不到问题所在,并try 将.htaccess移动到其他文件夹,当然也编辑了路径,但仍未成功.

还有其他任何人可以给出的故障排除提示吗?我如何才能判断重定向在后台实际在做什么?

推荐答案

RewriteRule ^screenshot-of-the-week/screenshot/([^/]+) /screenshot-of-the-week/screenshot/index.php?id=$1

该规则的"问题"在于,它还与重写的URL匹配(具体地说,[^/]+index.php匹配),因此第二次重写为/screenshot-of-the-week/screenshot/index.php?id=index.php(id=123参数被覆盖).那么,我希望your script生成404响应(而不是apache )?

要解决这个问题,您应该使正则表达式更具体和/或使用END标志(Apache2.4)来防止重写引擎进行额外的循环(和第二次重写).

在您的示例中,您传递的是一个数字值--因此,如果您只需要一个数字值,那么只需要匹配数字.

例如:

RewriteRule ^screenshot-of-the-week/screenshot/(\d+)$ /screenshot-of-the-week/screenshot/index.php?id=$1 [END]

请注意,我还在正则表达式中包括了尾随的$,否则您的站点可能会被滥用,因为anything可能会被追加到URL中,并且将提供相同的资源.(在您的原始规则中,追加/<anything>将产生相同的响应.)

(我假设您的.htaccess文件位于文档根目录中.)


我已经通过htaccess测试器判断了代码,它显示了正确的值.

MWL测试仪仅对文件进行一次遍历.这不是真正的apache 服务器的工作方式.因此,MWL测试器无法检测重写/重定向循环.

当我访问screenshot-of-the-week/screenshot/的时候,它运行得很好.

当您访问screenshot-of-the-week/screenshot/时,则不会处理该规则(正则表达式不匹配).Mod_dir提供DirectoryIndex文档(index.php),但没有id参数.

Php相关问答推荐

未找到laravel cascadeOnEdit

尽管包含目标日期,但日期范围比较仍有意外输出

如果再次调用SESSION_START(),会话.gc-max是否会重新启动?或者它是从第一次创建会话开始计算的?

如何使用`preg_replace`删除重复的空格字符

Nginx重写扩展名为.php的动态URL

如何将对我的域的请求重定向到子文件夹中的索引,同时保留域URL并使用.htaccess?

Laravel 10 -扩展现有的artisan命令?

MySQLi是否在事务错误时删除保存点(并且仅删除保存点)?

fpm-php + nginx + POST数据

Laravel自定义验证规则更正

execute_query 和prepare+execute 有什么区别?

如何在 PHP laravel 中将图像的透明背景转换为白色?

图像未在 Laravel Ajax Crud 中显示

后退按钮不起作用 laravel ajax crud

在WooCommerce中显示 checkout 的高级自定义字段(Advanced Custom Fields)并保存其值

在wordpress注销后防止后退操作

来自 GoDaddy 的邮箱在 Gmail 中显示为via

php var_dump(1) 返回字符串(4)

使用循环和引用而不是递归创建分层/父子数组

htaccess 无限循环问题