.htaccess URL和目录重定向

时间:2014-12-02 14:39:31

标签: apache .htaccess redirect

这是我的第一篇文章,请原谅我,如果我的求助方式出错了。我一直在阅读与我的问题相关的其他帖子但没有解决它。

我的路径:

http://example.com/m/page1

http://example.com/m/page2

... 等等。

我想将 / m / pageX 更改为 / m /#pageX ,而无需对网址进行硬编码,也不使用任何其他php脚本。

乍一看,我通过编写以下.htaccess配置文件完成了这项任务:

Options +FollowSymlinks -MultiViews

RewriteEngine On    
RewriteBase /

RewriteRule ^[dm]/(.+)$ /m/#$1 [R=302,NE,L,NC]

## hide .php extension
RewriteCond %{THE_REQUEST} \s/+common_([^.]+)\.php[\s?] [NC]
RewriteRule ^ %1 [R=302,L,NE]

## To internally forward
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/common_$1.php -f
RewriteRule ^(.+?)/?$ common_$1.php [L]
  1. 我的代码是最好的解决方案还是有其他方式来处理我的任务?
  2. 如何将/ m / pageX重定向到/ d /#pageX?
  3. 谢谢

2 个答案:

答案 0 :(得分:1)

网址不支持#符号。

这会将/ m / pageX重写为/ d / pageX:

RewriteEngine On    
RewriteRule ^m/(.*) /d/$1 [L,R=301]

这会将/ m / pageX重写为/ d / pageX#示例,但#example已修复:

RewriteEngine On   
RewriteRule ^m/(.*) /d/$1#example [NE,L,R=301]

[NE]是保持哈希(#)符号的必要条件。

这会将/ m / pageX重写为/ d /#pageX:

RewriteEngine On   
RewriteRule ^m/(.*) /d/#$1 [NE,L,R=301]

答案 1 :(得分:0)

在根.htaccess(高于/m//d/的级别)中尝试这些规则:

RewriteEngine On

RewriteRule ^d/(.+)$ /m/#$1 [NE,NC,L,R=302]

RewriteRule ^(.+)$ /#$1 [NE,L,R=302]

确保删除任何/d/.htaccess文件。

如果由于某种原因您希望从/d/.htaccess执行此操作,请在/d/.htaccess文件中使用此规则:

RewriteEngine On

RewriteRule ^(.+)$ /m/#$1 [NE,NC,L,R=302]