有没有办法用.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。
答案 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]