mod_rewrite:添加尾部斜杠?
我正在使用一个.htaccess文件来将目录的请求定向到提供有关该目录的信息的自定义php文件(并且我希望浏览器显示的URL不会更改)。mod_rewrite:添加尾部斜杠?
这里是.htaccess文件的相关部分。
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ /myphp.php?url=%{REQUEST_URI} [QSA,L]
这种运作良好,如果你去到一个目录,包括尾随斜线:
http://domain.com/path/
但是,如果没有最后的斜线,它不
http://domain.com/path
的网址(如图所示在浏览器中)变成:
http://localhost:8888/path/?url=/path
我试着加入这个规则之上的规则解决这个:
RewriteCond %{REQUEST_FILENAME} -D
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L]
但不是为我工作。
我该如何获得.htaccess添加尾部斜杠,如果它被省略,然后就像它在那里一样?
谢谢
更新: 按照要求,这里是整个事情。
<IfModule mod_rewrite.c>
RewriteEngine On
#force trailing slashes on real directories
RewriteCond %{REQUEST_FILENAME} -D
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L]
#use the directory viewer on directories without an index page
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ /myphp.php?url=%{REQUEST_URI} [QSA,L]
</IfModule>
感叹。
这条线:
RewriteCond %{REQUEST_FILENAME} -D
本来应该是:
RewriteCond %{REQUEST_FILENAME} -d
您是不是要找
RewriteRule ^(.*)$ $1/ [L]
呢?
我不知道你的方法。我会尝试像
RewriteRule ^/(\S+)/?$ /myphp.php?url=$1
我用这个重写之前,它的工作原理:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ http://www.domain.com$1
RewriteRule ^/(\S+)/?$ /myphp.php?url=$1
请注意,我并没有包括在第一个规则最后的斜线。除非绝对必要,否则我会建议你不要依赖.htaccess。这是因为服务器会不断检查.htaccess文件。改为使用httpd.conf文件意味着apache只会加载一次条件和规则。至少我被建议这样做是因为这个。
你说得对,那应该是*,而不是?修正了这个问题。我试着用你的建议,但效果相同。要在我的问题和版本中的版本中清楚,重定向将转到正确的位置。问题是浏览器显示的文本。我不希望用户看到查询字符串。我只希望他们看到目录的路径,并以斜线结尾。 – bkit 2010-06-29 18:25:08
您是否尝试仅在httpd.conf文件而不是.htaccess文件中添加代码?您可以将其保存在单独的httpd-extra.conf文件中,然后在httpd.conf文件的末尾使用include命令。 我使用此代码来实现你想要的,所以我可以提供更多的用户友好的网址。最后一行应该提供:将(内部)/ path重写为/myphp.php?url=path,因此您的浏览器仅显示第一个。 希望有所帮助。 – misterte 2010-06-29 18:41:00
试试这个。它会将尾部斜杠添加到没有结尾斜杠的目录请求中。
<IfModule mod_rewrite.c>
RewriteEngine On
#use the directory viewer on directories without an index page
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*?)/?$ /myphp.php?url=$1/ [QSA,L]
</IfModule>
不要与现代重写打扰,有它
<Location /some/path>
DirectorySlash On
SetHandler some-handler
</Location>
“DirectorySlash Off”做相反的事情时,它会在请求资源是目录时禁用mod_dir自动斜杠附加。默认打开。为什么不为OP工作是未知的,也许mod_dir没有加载 – higuita 2014-07-09 10:14:48
根据你描述我认为有一些错误的另一部分的行为的指令你的'.htaccess'文件,所以你介意发布整个事情? – 2010-06-28 18:45:26