如果没有斜线,apache .htaccess url rewrite不起作用

时间:2014-08-06 08:05:01

标签: regex apache .htaccess mod-rewrite

我正在使用Apache,尝试使用.htaccess将不同的域映射到不同的目录。用户在键入不同的域时访问不同的目录。我使用以下规则:

RewriteCond %{HTTP_HOST}   ^(www.)?mydomain.com$

RewriteCond %{REQUEST_URI}   !^/domaindir/

RewriteCond %{REQUEST_FILENAME}  !-f
RewriteCond %{REQUEST_FILENAME}  !-d

RewriteRule ^(.*)$   /domaindir/$1/ [L]

一切正常,除非我输入domain.com/dir(without/),浏览器将重定向到domain.com/domaindir/dir,我只想让它留在domain.com/dir中。如果我最后添加/,它将正常工作。

有谁知道如何解决这个问题?


谢谢anubhava,在使用你的代码后,我遇到了另一个问题。当我输入mydomain.com时,我会得到404,我不知道为什么它只是访问index.php而不是index.html,但如果我输入mydomain.com/dir,它可以获取index.html并且工作正常。错误日志在

之下
[perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/ -> 
[perdir D:/xampp/htdocs/] applying pattern '^((?!domaindir/).*?)/?$' to uri ''
[perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/ -> 
[perdir D:/xampp/htdocs/] applying pattern '^((?!domaindir/).+?)/?$' to uri ''
[perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/
[perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/index.php -> index.php
[perdir D:/xampp/htdocs/] applying pattern '^((?!domaindir/).*?)/?$' to uri 'index.php'

我仍然发现留在mydomain.com/dir会导致很多文件404,我怎样才能重定向到mydomain.com/dir/,thanks。

1 个答案:

答案 0 :(得分:0)

这是因为mod_dir为目录添加了斜杠。

请尝试使用此代码:

DirectorySlash off
RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$
RewriteCond %{REQUEST_FILENAME}  !-f
RewriteCond %{REQUEST_FILENAME}  !-d
RewriteRule ^((?!domaindir/).*)$ domaindir/$1 [L,NC]

# add a trailing slash now
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteCond %{THE_REQUEST} \s/+(.*?)[^/][?\s]
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301]