在htaccess中反转mod_rewrite

时间:2014-02-15 17:55:03

标签: regex apache .htaccess mod-rewrite redirect

有没有办法用.htaccess更改网址但不进行重定向?

我有像

这样的链接
<a href="?p=hello_world">Hello World</a>

在我的脚本(dir / index.php)中,并希望将网址更改为url.de/dir/hello_world

我当前的.htaccess文件:

 RewriteEngine On
 RewriteCond %{QUERY_STRING} ^p=(.*)$
 RewriteRule ^(.*)$ /%1? [R,L]  
 RewriteRule ^([a-zA-Z0-9-]+)/$ index.php?p=$1 [L]
 RewriteRule ^([a-zA-Z0-9-]+)$ index.php?p=$1 [L]

但现在从localhost/dir/?p=hello_world,网址已更改为localhost/hello_world而没有/dir。我不知道目录的名称,因为每个人都应该能够使用我的项目,而不必在他的服务器上更改.htaccess。

1 个答案:

答案 0 :(得分:1)

您需要使用此代码:

RewriteEngine On

# Determine the RewriteBase dynamically (\2 is backreference for string after 1st slash
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]

# External redirect from /dir?p=hello_world to /dir/hello_world
RewriteCond %{THE_REQUEST} \?p=([^\s&]+) [NC]
RewriteRule ^ %{ENV:BASE}%1? [R=302,L]

# Internal rewrite from /dir/hello_world to /dir/index.php?p=hello_world
RewriteRule ^([a-zA-Z0-9-]+)/?$ %{ENV:BASE}index.php?p=$1 [L,QSA]