您好我有以下问题:我有一些页面(php包含)我加载它们
http://www.domain.com/news/
他们工作得很完美。但是如果我删除尾部斜杠
http://www.domain.com/news
这种情况发生了 - > http://www.domain.com/news/?page=news&request=
以下是我的htaccess规则:
RewriteEngine on
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl|jpg|png|gif)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)(.*)$ /index.php?page=$1&request=$2
PS。可以吗,因为我在根文档中也有一个新闻文件夹?
答案 0 :(得分:1)
是的,这是因为根目录中有一个news/
文件夹。您的重写条件正在查找不是文件(即!-f
)或目录(!-d
)的任何内容。尝试重命名根目录中的news/
目录。
如果必须,您可以通过执行以下操作强制domain.com/news
重写为domain.com/news/
:
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]
答案 1 :(得分:0)
这是一个mod_dir问题。当它认为URL映射到目录时(即使稍后确定不会),它会重定向浏览器,以确保在末尾附加尾部斜杠。 See this recent explanation that I posted in another question
与其他答案一样,您可以关闭DirectorySlash
或确保所有受影响的网址都通过mod_rewrite重定向到尾部斜杠(以便重写和重定向发生在同一个模块中):
通过添加DirectorySlash Off
来关闭mod_dir。这使得mod_dir不会重定向浏览器,而是note that there are other consequences to turning this off。您可以在htaccess文件中添加该指令。
处理mod_rewrite中的尾部斜杠:
RewriteEngine On
Options -MultiViews
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ /$1/ [L,R=301]