1

是否可以从 website.pl/page 重定向到 website.pl/page/ ?我的 .htaccess 文件是 我的 htaccess 文件

4

2 回答 2

1

您的 .htaccess 中有正确的行,但您只需将 [L] 标志更改为 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f   #checks if current URI leads to real file
RewriteCond %{REQUEST_URI} !(.*)/$    #checks if URI ends by slash, if not goes next
RewriteRule ^(.*)$ http://paweljanicki.pl/$1/ [L]    #this line changes a URI

您需要更改为:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://paweljanicki.pl/$1/ [L,R=301]  #or skip 301 code [L,R]
#R=302 by default, but you can set any valid HTTP response status code 300-399

关键是 [L] 标志不输出重定向到浏览器,但 Apache 将在阴影中处理website.pl/page URI,并带有结束斜杠(如website.pl/page/)。

Apache Docs for RewriteRule Flags的更多信息

于 2012-10-28T20:28:21.800 回答
0

默认情况下,mod_dir 通过DirectorySlash指令(默认设置为“开”)为您执行此操作。这意味着如果 apache 认为您的请求是针对目录并且缺少尾部斜杠,mod_dir 将 301 将请求重定向到尾部斜杠。

但是,对于 CMS 或其他东西中的虚拟目录,apache 不会意识到 mod_dir 需要处理尾部斜杠。因此,您可以尝试在不指向现有文件或目录或现有目录的所有内容上附加斜杠,然后*关闭 mod_dir*。

在文档根目录的 htaccess 文件中,添加这些规则(在您可能已经拥有的任何类型的路由规则之上:

DirectorySlash Off

RewriteEngine On

# if request is for a directory
RewriteCond %{REQUEST_FILENAME} -d
# and is missing the trailing slash
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

# if request isn't for an existing directory or a file
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# and no trailing slash
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
于 2012-10-28T20:15:18.550 回答