.htaccess no-html重定向vs目录名

时间:2014-03-30 05:04:09

标签: .htaccess mod-rewrite

我打算在我的网站上实现这个.htaccess代码(感谢anubhava):

RewriteEngine on
rewritecond %{http_host} ^mydomain.com [nc]
rewriterule ^(.*)$ http://mydomain.com/$1 [r=301,nc]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.html -f [NC]
RewriteRule ^(.+?)/?$ $1.html [L]

ErrorDocument 404 /404.html

基本上它会将URL从“www.mydomain.com/this-page.html”更改为“www.mydomain.com/this-page” - 它确实做得很好。

但是,我遇到了一个问题 - 让我说我的一个页面是“treatments.html”。

网址将看起来像“mydomain.com/treatments”,这很好。但我还想制作一个名为“治疗”的目录,并在该文件夹中包含可用治疗的列表,它看起来像这样

"mydomain.com/treatments/treatment-one"
"mydomain.com/treatments/treatment-two"
"mydomain.com/treatments/treatment-three"

依旧......

问题是: 当我尝试访问文件“treatments.html”时,浏览器将其与目录混淆,服务器发送消息[403]禁止。

任何解决方案的想法?

1 个答案:

答案 0 :(得分:0)

好的,将您的上一条规则改为:

DirectorySlash On
ErrorDocument 404 /404.html
RewriteEngine on
RewriteBase /

rewritecond %{http_host} !^mydomain\.com$ [nc]
rewriterule ^(.*)$ http://mydomain.com/$1 [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.html -f [NC]
RewriteRule ^(.+?)/?$ $1.html [L]