.htaccess URL and directory redirect

混江龙づ霸主 提交于 2020-01-05 09:35:23

问题


This is my first post so excuse me if something it's wrong with my way of asking for help. I've been reading other posts related to my problem but none solved it.

My path:

http://example.com/m/page1

http://example.com/m/page2

... And so on.

I want to change the /m/pageX to /m/#pageX without hardcoding the URL and without using any additional php scripts.

At the first sight, I've accomplished this task by writing the following .htaccess configuration file:

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. Is my code the best solution or there is other way to approach my task ?
  2. How can I redirect the /m/pageX to /d/#pageX ?

Thank you


回答1:


Try these rules in your root .htaccess (a level above /m/ and /d/):

RewriteEngine On

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

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

Make sure to remove any /d/.htaccess file.

If for some reason you want to do it from /d/.htaccess then use this rule in /d/.htaccess file:

RewriteEngine On

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



回答2:


The # sign is not supported in URLs.

This will rewrite /m/pageX to /d/pageX:

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

This will rewrite /m/pageX to /d/pageX#example, but #example is fix:

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

[NE] is necessary to keep the hash (#) sign.

This will rewrite /m/pageX to /d/#pageX:

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


来源:https://stackoverflow.com/questions/27252048/htaccess-url-and-directory-redirect

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!