htaccess在实时服务器上无法正常执行重写规则

时间:2019-04-17 06:47:03

标签: php .htaccess server

我不太擅长编写重写规则。我想为以下形式的网址制定一条重写规则

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]

1 个答案:

答案 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。*,并有效地伪造了一个将所有这些命名的类型映射   文件,为其分配相同的媒体类型并对其进行内容编码   如果客户要求提供其中一个姓名,则将具有。然后   选择最符合客户要求的匹配项,然后返回   文档。

因此,您必须禁用它。