重写网址不包含文件扩展名,但允许子网域正常运行

时间:2014-01-28 04:20:00

标签: regex .htaccess mod-rewrite url-rewriting subdomain

我需要

  • 从我网站上的所有网址中删除文件扩展名(mywebsite.com/about.html>> mywebsite.com/about /)

  • 始终在网址末尾添加尾随/(mywebsite.com/about>> mywebsite.com/about /)

  • 允许例外,其中一个导航项链接到pdf,而不是html文档(mywebsite.com/calendar.pdf>> mywebsite.com/calendar/

  • 允许子域名转到他们的文件夹而不是被重写(我的文件夹树是public_html>我的主站点文件和dev文件夹>(在dev文件夹里面)index.html)我需要子域名链接到那个dev文件夹,当前网址重写将dev.mywebsite.com更改为public_html / dev.html

这是我目前正在黑客攻击的htaccess文件:

RewriteEngine On
RewriteRule ^calendar/?$ files/2013-2014_calendar.pdf
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

抱歉,这可能是重复或半复制。我尽可能多地环顾四周,但找不到任何适用于我的情况或我理解的东西。谢谢你们!

1 个答案:

答案 0 :(得分:1)

试试这段代码:

RewriteEngine On
RewriteBase /

# skip dev. subdomain
RewriteCond %{HTTP_HOST} ^dev\. [NC]
RewriteRule ^ - [L]

# calendar rule
RewriteRule ^calendar/?$ files/2013-2014_calendar.pdf [L]

# hide .html rules
RewriteCond %{THE_REQUEST} \s/+(.+?)\.html[\s?] [NC]
RewriteRule ^ %1/ [R=301,L,NE]

# add a trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]

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