php - htaccess 在实时服务器上不起作用重写规则
问题描述
我不擅长编写重写规则。我想为表单的 url 制定一个重写规则
url: domain.com/albums.php 到 url: domain.com/albums
工作完美,但是,当我点击特定专辑时,不会重写到下面的网址
网址: domain.com/albums/album-name
它卡住并再次显示所有专辑。我的 htaccess 重写规则是
RewriteRule ^albums/([A-Za-z0-9-]+)?$ /album-gallery.php?albumURL=$1 [NC,L]
RewriteRule ^albums$ /album.php [NC,L]
解决方案
试试看:
Options -MultiViews
# To externally redirect without .php
RewriteCond %{THE_REQUEST} \s/+(.+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]
RewriteRule ^albums/([A-Za-z0-9-]+)?$ /album-gallery.php?albumURL=$1 [NC,L]
# To internally rewrite to .php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
mod_negotiation 上的Apache 文档描述了 Multiviews 选项在启用时的作用:
如果服务器收到对 /some/dir/foo 的请求并且 /some/dir/foo 不存在,则服务器读取目录以查找所有名为 foo.* 的文件,并有效地伪造一个类型映射,其中命名所有这些文件,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中之一。然后它选择最符合客户要求的匹配项,并返回该文档。
所以在你的情况下,你必须禁用它。
推荐阅读
- python - 如何使用 python gsmmodem 模块发送 unicode 字符?
- postgresql - AWS、RDS:如何使用硬盘文件将 +40GB Postgres 数据库从 AWS ec2 实例迁移到 RDS?
- java - 使用 Mockito 模拟类时出现 NullPointerException
- python - 将字符串转换为日期时间 - python 数据框
- azure - 在 Azure 应用服务中为多个虚拟应用配置 AspNetCoreModuleV2
- ruby - `selenium-webdriver` ruby gem 无法在 Ubuntu 14.04 上与 chromedriver 连接
- c++ - QSerialPort 无法打开,错误代码为 11
- vb.net - 如何从 URL 传递值
- python - 使用该数据帧的三列之间的比较过滤数据帧
- java - 我想使用 Fluent 等待根据元素的存在返回 true 或 false,该怎么做?