即使文件夹存在,htaccess mod也会重写

时间:2015-03-08 16:18:30

标签: .htaccess mod-rewrite

我正在建立一个网站,我只知道我遇到了这个问题。

当用户访问 www.website.com/something 时,我希望htaccess打开 www.website.com/index.php?s =某事 ,这对我当前的重定向工作正常,除非我有#34;某事"作为现有文件夹。

" s"代表"子页面"

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

我只有文件夹存在(/ js / css / images ..等)才有问题所以当我尝试访问 www.website.com/images 时,它仍会显示正确的页面但它在地址栏 www.website.com/images/?s=images 中显示此信息。有一点需要注意的是,如果我将?s =图像更改为?s = images213123,那么php仍然只能将/ images /识别为$ _GET [' s'];

我没有经历过htaccess,但这是我到目前为止所放在一起的,也许问题出在其他地方而不是上面的那一行。 我尝试将[L]移到第3条规则,尝试将有问题的规则与其他规则分开,尝试用我有限的知识做的一切,我无法做任何事情。

非常感谢任何提示或想法! 提前谢谢

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^u/([a-zA-Z0-9_-]+)$ /u.php?u=$1
RewriteRule ^p/([a-zA-Z0-9_-]+)$ /$1.php
RewriteRule ^([a-zA-Z0-9_-]+)/userpage/([a-zA-Z0-9_-]+)/?$ /c.php?s=$1&c=$2
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]


ErrorDocument 400 /index.php
ErrorDocument 401 /index.php
ErrorDocument 403 /index.php
ErrorDocument 404 /index.php
ErrorDocument 500 /index.php

编辑:添加" DirectorySlash Off"并改变条件和规则,如@Jon Lin的答案解决了这个问题。我还必须清除Firefox缓存以查看更改。这是我的最终htaccess,适用于我的目的。

Options +FollowSymlinks
RewriteEngine On
DirectorySlash Off
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^u/([a-zA-Z0-9_-]+)$ /u.php?u=$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p/([a-zA-Z0-9_-]+)$ /$1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/userpage/([a-zA-Z0-9_-]+)/?$ /c.php?s=$1&c=$2

# I intentionally skipped the conditions here
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]


ErrorDocument 400 /index.php
ErrorDocument 401 /index.php
ErrorDocument 403 /index.php
ErrorDocument 404 /index.php
ErrorDocument 500 /index.php

1 个答案:

答案 0 :(得分:0)

重写条件仅适用于紧随其后的规则,因此您有1个条件和4个规则。该1条件仅适用于第一条规则,而另外3条条件不适用于它们。您需要确保所有4条规则都不适用于现有文件或目录的请求:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^u/([a-zA-Z0-9_-]+)$ /u.php?u=$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p/([a-zA-Z0-9_-]+)$ /$1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/<userpage>/([a-zA-Z0-9_-]+)/?$ /c.php?s=$1&c=$2

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /index.php?s=$1 [L]