0

您好我有以下问题:我有一些页面(包括 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。可能是因为我在根文档中也有一个新闻文件夹吗?

4

2 回答 2

1

是的,这是因为您news/在根目录中有一个文件夹。您的重写条件正在寻找任何不是文件(即!-f)或目录(!-d)的东西。尝试news/在根目录中重命名您的目录。

如果必须,您可以通过执行以下操作强制domain.com/news重写:domain.com/news/

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]
于 2012-12-12T23:13:54.320 回答
0

这是一个 mod_dir 问题。当它认为一个 URL 映射到一个目录时(即使它后来确定不映射),它会重定向浏览器,以确保在末尾附加一个斜杠。请参阅我在另一个问题中发布的这个最近的解释

就像在另一个答案中一样,您可以关闭DirectorySlash或确保所有受影响的 URL 都通过 mod_rewrite 使用尾部斜杠重定向(以便重写重定向发生在同一个模块中):

  1. 通过包含一个DirectorySlash Off. 这使得 mod_dir 不会重定向浏览器,但请注意关闭它还有其他后果。您可以在 htaccess 文件中添加该指令。

  2. 处理 mod_rewrite 中的尾部斜杠:

    RewriteEngine On
    Options -MultiViews
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule ^(.*)$ /$1/ [L,R=301]
    
于 2012-12-12T23:45:15.127 回答