.htaccess误读了目录

时间:2012-06-09 01:57:07

标签: php apache .htaccess clean-urls

现在,请光临我。我对.htaccess语法很恐怖。但是,我有一个为索引页面设置变量的设置,但它对目录也是如此,我不希望它这样做。这是我的.htaccess文件:

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/(login|images|favicon\.ico|home|about|sitemap|contactus|termsandconditions|privacypolicy|signup|search|careers|error|css|js) [NC]

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

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

RewriteRule ^php/$ error/

现在,通过此设置,如果我输入mysite.com/login,它将重定向到index.php页面并将login设置为name变量。如何将其置于忽略目录的位置?这令我感到沮丧,我已经浏览了这个网站超过一个小时的答案,但找不到类似的问题(我也可能会对此感到厌恶。哈哈!)。

此外,如果您查看上一个RewriteRule,您可以看到我正在尝试将任何尝试访问我的php/文件夹重定向到我的error/文件夹。这也行不通。感谢您的评论!

2 个答案:

答案 0 :(得分:1)

RewriteCond仅适用于紧随其后的RewriteRule。此外,您可以在最后使用/?分别合并第3行和第4行以及第5行和第6行,这样/可选(regex)。

您的文件可能与此类似:

RewriteEngine On
#the following line will not rewrite to anything because of "-", & stop rewiting with [L]
RewriteRule ^(login|images|favicon\.ico|home|about|sitemap|contactus|termsandconditions|privacypolicy|signup|search|careers|error|css|js)/?(.*)$ - [L,NC]
RewriteRule ^php/?(.*)$ error/ [L,NC]
RewriteRule ^([^/]+)/?$ index.php?name=$1 [L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?name=$1&page=$2 [L]

您可能对Apache Mod_Rewrite Documentation感兴趣。

答案 1 :(得分:0)

RewriteCond %{REQUEST_URI} !^/(login|images|favicon\.ico|home|about|sitemap|contactus|termsandconditions|privacypolicy|signup|search|careers|error|css|js) [NC] !-d


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

要么不对目录或文件执行规则

有关mod_rewrite文档页面的更多信息,请搜索CondPattern