labouseur.com/course-compilers.html
br />
labouseur.com/course-compilers
(甚至更好,也许我应该对其进行重组,以便它是课程/编译器。)
我正在使用基于Linux的共享网站托管服务,因此我没有服务器的管理控制权,但是我拥有对.htaccess的控制权。我在网上阅读的参考文献对我来说似乎还不清楚,所以我在这里寻求一些清晰度和建议。
#1 楼
您实际上可以从服务器上的文件中删除.html并在htaccess中进行设置,以便将它们作为html文件提供,但这可能不是您想要的。执行以下操作:
RewriteEngine on
# Check this condition to ensure that it's not a directory.
RewriteCond %{REQUEST_FILENAME} !-d
# Check this condition to ensure that there's a file there
RewriteCond %{REQUEST_FILENAME}\.html -f
# Replace html with your file extension, eg: php, htm, asp
RewriteRule ^(.*)$ .html
评论
这里有更多的复杂性,特别是如果您担心重复的内容问题。使用上述规则,您的页面仍然可以从旧的URL访问。
–JasonBirch
2010年7月9日在22:12
#2 楼
首先,请确保apache具有该模块,并允许它在.htacces文件中,然后添加:RewriteEngine on
# Rewrite rules
RewriteRule ^/myoldsubfolder/(.*) /newfolder/
您的示例将需要
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI}\.html -f
RewriteRule ^/(([a-zA-Z0-9_]+)/?)$ /.html
用于单层目录结构和
RewriteRule ^/(([a-zA-Z0-9_]+)/?)+$ /.html
用于多级结构。
但是请注意
如果您具有结构
/site/.htaccess
/site/subfolder/.htaccess
/site/subfolder/cats/.htaccess
子
.htaccess
文件中的重写规则将相对于其父文件夹,您可以陷入一些混乱的重写循环情况。如果可以的话,请确保使用RewriteCond
阻止它们发生!评论
您是否介意在最后一点上使用更多信息(使用RewriteCond停止循环)?
–特拉维斯·诺斯库特(Travis Northcutt)
2010年7月9日13:30
#3 楼
除了上述答案以外,还可以使用RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([\w-]+)$ .html [L]
([\w-]+)
允许带连字符(-)的字母,数字。(.*)
将重写每个请求无论如何,这可能会导致以下其他规则失效,从而导致内部服务器在访问时出错。评论
您的RewriteRule模式是对问题中给出的特定示例的可接受答案的改进,但是,当路径段多于例如时,它将无法匹配更一般的情况。 / path / to / course-compilers。包括L标志以减少对以下规则的影响。尽管(。*)模式不必要地通用,但由于存在检查文件的条件,因此不太可能引起严重问题。
–怀特先生
17年2月8日在11:22
#4 楼
您无需使用.htaccess文件即可完成此操作。只需将文件结构化为目录,而不是使用“ labouseur.com/course-compilers.html”,只需将文件index.html命名为“ course-compilers”即可。然后,当您指向该目录时,默认情况下将提供索引,但不会在URL中显示该索引。因此,您只需将链接写为“ labourseur.com/course-compilers”,一切都会好起来。不需要.htaccess。
评论
请注意,这不是仅在服务器配置(.htaccess)中执行的操作。重要的第一步是实际更改应用程序中的URL,否则最终将导致大量不必要的重定向(或重复的内容)。