1

我有一个为索引页面设置变量的设置,但它对目录也有同样的作用,我不希望它这样做。这是我的 .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页面并设置loginname变量。如何使它忽略目录?这让我很沮丧,我已经浏览了这个网站一个多小时来寻找答案,但找不到类似的问题(不过,我可能也很讨厌。哈哈!)。

此外,如果您查看最后一个RewriteRule,您会看到我正在尝试将任何访问我的php/文件夹的尝试重定向到我的error/文件夹。这也行不通。

4

2 回答 2

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 文档感兴趣。

于 2012-06-09T02:07:16.050 回答
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

于 2012-06-09T02:06:59.300 回答