首页 > 解决方案 > 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]

标签: php.htaccessserver

解决方案


试试看:

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.* 的文件,并有效地伪造一个类型映射,其中命名所有这些文件,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中之一。然后它选择最符合客户要求的匹配项,并返回该文档。

所以在你的情况下,你必须禁用它。


推荐阅读