我不太擅长编写重写规则。我想为以下形式的网址制定一条重写规则
URL: domain.com/albums.php转到 URL: domain.com/albums
工作正常,但是当我单击特定专辑时,请不要重写为以下网址
URL: 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]
答案 0 :(得分:0)
尝试一下:
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]
Apache docs on mod_negotiation描述了启用多视图选项后的功能:
如果 服务器收到对/ some / dir / foo的请求,而/ some / dir / foo没有 存在,然后服务器读取目录以查找所有名为 foo。*,并有效地伪造了一个将所有这些命名的类型映射 文件,为其分配相同的媒体类型并对其进行内容编码 如果客户要求提供其中一个姓名,则将具有。然后 选择最符合客户要求的匹配项,然后返回 文档。
因此,您必须禁用它。