2

我有一个如下所示的重写规则:

RewriteRule ^([a-zA-Z0-9\-]+)\/([a-zA-Z0-9\-]+)/?$ /index.php?name=$1&artname=$2


当我尝试访问存在的目录结构时:/pics/vikings浏览器 url 被重写为/pics/vikings/?name=pics&artname=vikings. 但这仅在我不将最后一个包含/在 url 中时才会发生。所以/pics/vikings/不会暴露真实的url。


我尝试为现有目录添加规则,例如:

RewriteRule ^pics\/vikings/?$ /index.php


当目录存在时,我也尝试按照 Rewriting url with htaccess 中的DirectorySlash Off建议添加

编辑:
我的 .htaccess 文件:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9\-]+)\/([a-zA-Z0-9\-]+)/?$ /index.php?name=$1&artname=$2

Options All -Indexes

ErrorDocument 403 /
ErrorDocument 404 /
ErrorDocument 405 /
ErrorDocument 500 /
4

2 回答 2

1

如果它是目录,则需要排除它并且为了安全起见,如果它是现有文件(可选),也应排除它。

RewriteCond   %{REQUEST_FILENAME}    !-d
RewriteCond   %{REQUEST_FILENAME}    !-f
RewriteRule   ^([a-zA-Z0-9\-]+)\/([a-zA-Z0-9\-]+)/?$ /index.php?name=$1&artname=$2
于 2013-08-16T15:08:30.980 回答
1

您需要将以下行添加到您的 .htaccess 代码中

Options -Indexes
于 2013-08-16T14:53:58.640 回答