我正在尝试让Apache重定向每个URL,并在末尾添加斜杠。我对以下类型的网址有疑问。
http://mywebsite.com/profile/ david.tate
出于任何原因,我的规则都不会在此类URL的末尾添加斜杠。我需要在最后加上斜杠。
我已经在stackoverflow上搜索了一些答案,但是找不到任何可以帮助的东西。我不是URL重写的专家。
这是我现在的规则。
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
能否请您告诉我如何编写上面的URL,以使末尾带有斜杠?
谢谢
答案 0 :(得分:1)
我假设您只想将请求重定向到路径的最后一部分以 开头的URL?而且也可能只有在它类似于旧的“文件扩展名”之类的东西时,该扩展名与文件的基本名称之间用句点分隔。这样,“文件名”中的句点先于句号而实际上在句点后?
RewriteEngine on
RewriteRule [^/]+\.[^/]+$ %{REQUEST_URI}/ [R=301]
您需要注意的是,在某处没有适用的 other 规则再次消除该斜杠,这在框架等中通常是这样,以保持URL的美观。>
一个好主意是从302临时重定向开始,然后在确定一切正确设置之后,才将其更改为301永久重定向。这样可以防止在尝试时缓存问题...
此规则将同样在HTTP服务器主机配置或动态配置文件内(“htaccess的”文件)工作。显然,重写模块需要加载到http服务器内部并在http主机中启用。如果使用动态配置文件,则需要注意在主机配置中完全启用了它的解释,并且该解释位于主机的DOCUMENT_ROOT
文件夹中。
还有一个一般性说明:您应该始终喜欢将此类规则放置在http服务器主机配置中,而不要使用动态配置文件(“ .htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为,难以调试的原因,并且确实降低了http服务器的速度。仅当您无法访问真正的http服务器主机配置(阅读:真正便宜的服务提供商)或坚持编写自己的规则的应用程序(这显然是安全的噩梦)时,才提供它们作为最后的选择。
答案 1 :(得分:1)
您可以使用此规则为所有URL(现有文件除外)添加斜杠:
RewriteEngine On
# add a trailing slash to directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]