2010-01-07 82 views
10

截至目前我的网站有几个静态页面,其中之一是/投资组合。除此之外,我的htaccess隐藏了.html扩展名。我想添加一个投资组合目录,但我不想将现有投资组合页面作为默认索引文件移动到投资组合目录中。我的/投资组合页面是我的Google附加链接之一,我担心如果它被移动或者网址发生变化,Google会认为它是一个全新的页面。.htaccess,正确重写目录和文件同名

我的问题是,一旦我添加/ portfolio /目录,每当我尝试访问原始/投资组合页面时,会自动添加尾部斜杠并链接到目录本身。

我试过了无数的选择,其中一个是/ portfolio/to/portfolio的重写,但是这会创建一个无限循环。我也尝试过“DirectorySlash Off”,但是它只能在目录内删除尾部的斜杠,并没有恢复到原始/投资组合页面的访问。

最终,我想保留我的/投资组合页面,链接到目录内部的页面,如/ portfolio/example,如果/ portfolio或/ portfolio /被访问,它将导致显示相同的页面如果没有Google认为它是重复的内容,它就在目录之外。

类似的问题存在的位置: .htaccess rewriting url to page or directory虽然这仍然导致了我无限循环出于某种原因,我猜它是与隐藏的扩展。

这里是我的htaccess-

 
RewriteEngine On 

# HTML to PHP 
RemoveHandler .html .htm 
AddType application/x-httpd-php .htm .html 

# Hide extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

# Force WWW 
RewriteCond %{HTTP_HOST} ^mydomain\.net 
RewriteRule ^(.*)$ http://www.mydomain.net/$1 [R=301,L] 

# Blog Subdomain 
RewriteCond %{HTTP_HOST} ^blog.mydomain.net$ 
RewriteRule ^(.*)$ http://www.mydomain.net/blog/$1 [R=301,L] 

我知道这是不是具有相同名称的目录作为静态页面一个伟大的想法,但我真的宁愿不改变现有的页面,并失去了谷歌网站连结,所以一个干净和适当的方式来处理这将是一个帮助。

回答

13

这里有两件事“错误”,有两种解决方法。

首先是apache在应用重写条件之前“计算出”有一个名为“portfolio”的目录。这意味着重写条件正在接收“投资组合/”而不是“投资组合”。

其次,规则是专门避免你想,如果有,其实是一个目录由该名称的重写

解决方案1“-d!”:手动重新路由的投资组合目录请求删除斜杠。

# Manually re-route portfolio/ requests to portfolio 
RewriteCond %{REQUEST_FILENAME} portfolio/$ 
RewriteRule ^(.*)/$ $1 

# Hide extension 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

请注意删除“!-d”条件。

这样做的缺点是,你是直接进行硬编码的“组合”边缘情况到重写规则,并且仍然会导致浏览器首先被重定向到投资组合/

解决方案2:设置DirectorySlash关闭并删除目录存在测试

# Disable Automatic Directory detection 
DirectorySlash Off 

# Hide extension 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

设置DirectorySlash关会解决这个问题最好的,但可能会破坏你的网站的其他部分,你真正想要的汽车DirectorySlash。最好的运气,我希望这有助于。

请注意,在测试解决方案2时,浏览器可能会记得将“投资组合”重定向到“投资组合/”,并在将请求发送到服务器之前执行重定向。请务必在缓存清晰干净的环境中进行测试以获得最佳效果。

+0

雅知道,我已经试过了。我尝试删除该行并删除!,结果没有任何变化。 我会注意到,我正在使用xampp进行测试。到目前为止,我只注意到我需要清除缓存并重新启动浏览器以使一些更改生效,但我不确定这是否会导致解决方案无法工作。 – PaulC 2010-01-07 02:21:32

+0

嗯,我猜测我的情况没有任何真正的解决方案。我几乎无视这个问题,直到我去上传我的新网站时遇到了这个问题。希望那时我能弄清楚什么。尽管感谢您的帮助。 – PaulC 2010-01-08 15:01:28

+0

在我自己的环境中进行了一些测试之后,我编辑了我的答案,以显示您拥有的选项。 – 2010-01-08 18:33:24