2014-01-28 41 views
1

我需要重写URL不包括文件扩展名,但允许子域行动通常

  • 在我的网站(mywebsite.com/about.html >> mywebsite卸下所有URL的文件扩展名。 COM /左右/)

  • 总是添加一个尾随/到URL(mywebsite.com/about >> mywebsite.com/about/的端部)

  • 允许的例外的是,资产净值的一个项目链接到PDF,而不是HTML文档(mywebsite.com/calendar.pdf >> myweb site.com/calendar/

  • 允许子域去他们的文件夹,而不是被改写(我的文件夹树的public_html>我的主网站的文件和文件夹开发>(dev的文件夹里面的index.html)),我需要的子域名链接到该文件夹​​的开发,目前该URL重写变化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

试试这个代码:

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] 
+0

伟大的作品!非常感谢。我必须更熟悉RegExp和这个重写的东西。你也许知道如何强制它添加尾随的“/”?这是你的代码唯一的问题。 – albrechtnate

+0

我有'重写规则^%1/[R = 301,L,NE]'最后强制'/'。 – anubhava

+0

嗯......这部分似乎没有工作(mywebsite.com/dev除外)。无论是否加载正确的加载斜杠。我希望它可以将客户端中的网址从斜线改为斜线。你能解释一下hide .html规则部分的内容吗? – albrechtnate