1

我目前有一个如下所示的 URL:

www.mysite.com/folder-name/page-name.php

但我需要它看起来像这样:

www.mysite.com/folder-name/page-name/

我正在寻找“文件夹名称”中的 .htaccess 的正则表达式,并且只针对它所在的文件夹。它需要删除 .php 扩展名并重定向到末尾带有斜杠的 url。

此外,如果 url 是www.mysite.com/folder-name/我需要忽略表达式以避免最后出现 //。我看过但找不到仅针对特定文件夹的解决方案。刚开始使用 PHP 和正则表达式让我大吃一惊!

我找到了这样的代码:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+.php
RewriteRule (.*).php$ /$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/$ $1.php [L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]

但它会返回网址:

www.mysite.com/var/www/vhosts/mysite.com/httpdocs/folder_name/page_name/
4

1 回答 1

0

你得到这样的路径的原因是因为 apache 正在猜测你的规则的目标 ( $0/) 是文件路径还是 URL 路径,并且它错误地猜测它是文件路径。您需要提供重写基础:

RewriteBase /

或使您的目标成为绝对 URI

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/$ /$1.php [L]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ /$0/ [L,R=301]
于 2013-04-11T08:17:21.003 回答