这就是我想要实现的目标。
用户点击链接或在类似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/上进行测试时,此功能正常,但在我的网站上会导致重定向循环。
有什么想法吗?
答案 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(重定向到等效的#