给定现有目录时,htaccess重写会公开真实的URL

时间:2013-08-16 14:40:38

标签: php regex .htaccess rewrite

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

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


当我尝试访问存在的目录结构时,如:/pics/vikings,浏览器URL将重写为/pics/vikings/?name=pics&artname=vikings。但是只有在我没有将最后/包含在网址中时才会发生这种情况。因此/pics/vikings/不会公开真实的网址。


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

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


我也尝试按Rewriting url with htaccess when a directory exists

中的建议添加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 /

2 个答案:

答案 0 :(得分:1)

您需要在.htaccess代码中添加以下行

Options -Indexes

答案 1 :(得分:1)

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

RewriteCond   %{REQUEST_FILENAME}    !-d
RewriteCond   %{REQUEST_FILENAME}    !-f
RewriteRule   ^([a-zA-Z0-9\-]+)\/([a-zA-Z0-9\-]+)/?$ /index.php?name=$1&artname=$2