htaccess 301重定向添加本地目录

时间:2014-11-13 15:56:25

标签: php apache .htaccess mod-rewrite rewrite

所以,问题在于:

此地址:website.com/test/test.html/

成为:website.com/www/test/test.html

我需要它:website.com/test/test.html

网站所在的本地目录是:/ www / test

在我的htaccess文件中,我有: RewriteRule ^(.+)\/$ $1 [R=301,L](如果网址末尾有斜杠,则重定向不带斜杠)

重定向并删除斜线,除了.com之后它添加了本地路径(www)

请记住,在我的RewriteRule中,我无法指定实际地址,因为它是动态的,所以它必须是$ 1而不是website.com/test/$1

如果没有添加本地目录" www"?

,如何才能使其正常工作?

2 个答案:

答案 0 :(得分:0)

使用此规则进行斜杠删除:

RewriteEngine On

RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ %{ENV:BASE}$1 [R=302,L,NE]

答案 1 :(得分:0)

来自RewriteRule上的Apache文档:

  

在Directory和htaccess上下文中,Pattern最初会是   删除前缀后,与文件系统路径匹配   将服务器引导到当前的RewriteRule(例如" app1 / index.html"或者   "的index.html"取决于指令的定义位置。

所以我的第一个猜测是你没有在RewriteRule之前定义RewriteCond以匹配URL信息而不是路径信息。

您可以查看http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond以获取有关RewriteCond的更多信息。在我的头脑中,我猜你会想做这样的事情:

RewriteCond %{REQUEST_URI} ^(.+)\/$
RewriteRule ^(.+)\/$ $1 [R=301,L]

如果这不起作用,您可以尝试更改RewriteRule以补偿/ www /在您的路径中的事实。像这样:

RewriteRule ^\/www\/(.+)\/$ $1 [R=301,L]

希望这会有所帮助。正则表达式和重写可能是一种痛苦。

相关问题