0

我有 URL 重写规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/sites/
RewriteRule ^([^/]+)/?(.*)$ sites/$1/$2 [NC,L]

调用此 URL 时:http://example.com/suyash

它在内部调用http://example.com/sites/suyashhttp://example.com/suyash仅保留 URL。请注意该文件夹sites/suyash实际存在

我面临的问题是,当我调用 URL:(http://example.com/Suyash大写)时,它会显示 404 错误。

当我使用 mod_speling 模块并将以下内容添加到代码中时:

CheckSpelling On

现在当我调用http://example.com/Suyash它时,将 URL 更改为http://example.com/sites/suyash

如何让它仅将 URL 从更改http://example.com/Suyashhttp://example.com/suyash

4

2 回答 2

0

mod_speling 将重定向浏览器以修复拼写,没有办法避免这种情况。我唯一能想到的就是尝试使用P标志在内部代理请求。您需要确保已加载 mod_proxy。我没有测试过这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/sites/
RewriteRule ^([^/]+)/?(.*)$ sites/$1/$2 [NC,L,P]
于 2014-09-07T16:36:32.160 回答
0

我会说保持CheckSpelling距离。

然后有这样的规则:

CheckSpelling Off
RewriteEngine On
RewriteBase /

RewriteCond %{DOCUMENT_ROOT}/$0 -f [NC]
RewriteCond %{DOCUMENT_ROOT}/$0 -d [NC]
RewriteCond %{REQUEST_URI} !^/sites/ [NC]
RewriteRule ^([^/]+)/?(.*)$ sites/$1/$2 [L]
于 2014-09-08T10:11:43.520 回答