如何将目录中的所有网址重定向到同一网址的哈希版本?

时间:2014-12-29 13:00:03

标签: .htaccess redirect

这就是我想要实现的目标。

用户点击链接或在类似http://test.com/projects/a-project

的位置栏中输入内容

该页面被重定向到http://test.com/projects/#a-project

项目子目录中存在多个项目。

到目前为止,这是我的htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule /?projects/(.*)$ /projects/#$1 [L,R,NE]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

http://htaccess.madewithlove.be/上进行测试时,此功能正常,但在我的网站上会导致重定向循环。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你有一个无限循环,因为htaccess看不到hashtag(它只是客户端) 所以你的规则会一次又一次地执行。

相反,您可以使用此代码

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{THE_REQUEST} \s/projects/([^\s]+)\s [NC]
RewriteRule ^ /projects/#%1 [R,L,NE]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

注意:{THE_REQUEST}用于确保请求不是来自内部重定向,而是来自原始请求(客户端请求)。所以在这段代码中,只有当它来自客户端请求时才重定向到#(而不是之后,导致无限循环)。


编辑:解决你的ajax问题

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{THE_REQUEST} \s/projects/([^\s]+)\s [NC]
RewriteCond %{QUERY_STRING} !^ajax=true$ [NC]
RewriteRule ^ /projects/#%1 [R,L,NE]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Ajax电话:http://test.com/projects/a-project?ajax=true
普通(用户)呼叫:http://test.com/projects/a-project(重定向到等效的#