如何配置Apache(.htaccess?)以使用mod_rewrite将虚拟路径传递给PHP文件?

时间:2019-06-10 13:32:41

标签: php apache mod-rewrite

我有一个位于http://www.foo.bar/script的脚本,并且想使用虚拟路径名将数据发送到该脚本。例如,http://www.foo.bar/script/this/is/a/path会将“ this / is / a / path”传递给/ script。我希望不更改用户看到的URL。

我已经使用类似于此处htaccess mod_rewrite multiple paths to query string的建议将其与Apache mod_rewrite一起使用。我无法做的是将路径传递到脚本,而不更改用户看到的URL。因此,访问http://www.foo.bar/script/stackoverflow/rocks的用户,位于/ script的脚本将收到/ stackoverflow / rocks作为查询字符串或URI,但URL不会改变。我知道这并不少见,也许我在寻找答案时使用了错误的术语。谢谢您的考虑。

有人建议的一个主意:

RewriteEngine On
RewriteBase /
RewriteRule "script/(.*)" "https://www.foo.bar/script/?data=$1" [R,L]

但是,以上更改了浏览器中的URL。我不想公开“?”在查询字符串上。

1 个答案:

答案 0 :(得分:0)

我并没有真正需要的确切代码,但是我使用的某些东西可能会对您有所帮助。上面使用rewrite_module的示例将用.php重写任何URL,还将接受不带.php的页面名称,并重定向到pageName.php巫婆接近您想要的名称,即用户编写的名称,并重定向到您想要的脚本。另外,它还提供了一些针对URL末尾的交叉脚本的保护。

<IfModule rewrite_module>
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^([^\.]+)$ $1.php [NC,L]
   RewriteCond %{QUERY_STRING} ^(.*?)(?:%3C|%3E|&lt;|&gt;)(.*)$
   RewriteRule ^((.*)((?!([.]*p*h*p))\w+)) /$1?%1%2 [L,R=302,NE]
</IfModule>