mod_rewrite将某些文件夹转换为参数

时间:2010-01-15 03:08:10

标签: php apache mod-rewrite parameters directory

我有一个网站,我想将第一个子文件夹转换为参数(来自子文件夹的设置列表),所以

http://localhost/mysite/folder1/dosomething.php

显示如上所示,但对于PHP,它看起来像:

... localhost / mysite / dosomething.php?organization = folder1

我只需要在某些文件夹上执行此操作(例如,不是... localhost / mysite / admin /)并且我需要考虑这样的事实:可能已经或可能没有附加到URL的参数< / p>

我正在创建一个供多个组织使用的网站,并且基于组织,网站中的颜色等需要不同,但每个组织将使用相同的页面,并且客户希望组织中的短代码URL。我认为最好的方法是使用mod_rewrite。

我试过了:

rewriterule ^folder1/(.*) $1&organisation=folder1 [NC]

但这不起作用或处理可能已经有附加到URL的参数的事实。任何人都可以建议一种方法吗?

亲切的问候和非常感谢

根据您的反馈:

嗯,我无法让这个工作。在.htaccess我有 选项+ FollowSymLinks RewriteEngine on RewriteRule ^ folder1 /(.*) $ 1&amp; organization = folder1 [NC,QSA]

如果我浏览... server / sitename / folder1 / destination.php我找不到页面错误,并且htaccess调试日志说:

(3)[perdir / var / www / sitename /]添加路径信息后缀:/ var / www / sitename / folder1 - &gt; /var/www/sitename/folder1/destination.php (3)[perdir / var / www / sitename /] strip per-dir prefix:/var/www/sitename/folder1/destination.php - &gt;文件夹1 / destination.php (3)[perdir / var / www / sitename /]将模式'^ folder1 /(。)'应用到uri'folder1 / destination.php' (2)[perdir / var / www / sitename /]重写'folder1 / destination.php' - &gt; 'destination.php&安培;组织的folder1 =' (3)[perdir / var / www / sitename /] add per-dir prefix:destination.php&amp; organization = folder1 - &gt; /var/www/sitename/destination.php&organisation=folder1 (2)[perdir / var / www / sitename /] strip document_root prefix:/var/www/sitename/destination.php&organisation=folder1 - &gt; /sitename/destination.php&organisation=folder1 (1)[perdir / var / www / sitename /]内部重定向与/sitename/destination.php&organisation=folder1 [内部重定向] (3)[perdir / var / www / sitename /] strip per-dir prefix:/var/www/sitename/destination.php&organisation=folder1 - &gt; destination.php&安培;组织的folder1 = (3)[perdir / var / www / sitename /]将模式'^ folder1 /(.)'应用到uri'destination.php&amp; organization = folder1' (1)[perdir / var / www / sitename /]通过/var/www/sitename/destination.php&organisation=folder1

3 个答案:

答案 0 :(得分:0)

要将参数附加到查询字符串(而不是替换它们),请使用QSA标志:

RewriteRule ^folder1/(.*) $1&organisation=folder1 [NC,QSA]

“此标志强制重写引擎将替换字符串的查询字符串部分附加到现有字符串,而不是替换它。如果要通过重写规则向查询字符串添加更多数据,请使用此字符。”< / p>

请参阅Apache documentation for mod_rewrite

答案 1 :(得分:0)

正确的规则是:

# rewrite for php scripts
RewriteRule ^(folder[0-9]+)(/([^/]*\.php)?)$ .$2?organisation=$1 [NC,QSA]
# rewrite for css and js (assuming they are relative to path of your htaccess)
RewriteRule ^(folder[0-9]+)/(.*) ./$2 [NC,QSA]

如果您不介意在任何地方发送您的参数,这也应该有效:

RewriteRule ^(folder[0-9]+)/(.*) $2?organisation=$1 [NC,QSA]

答案 2 :(得分:-1)

我建议

RewriteRule ^folder1/(.*)?(.*) $1?organisation=folder1&$2 [NC]
RewriteRule ^folder1/(.*) $1?organisation=folder1 [NC]

我怀疑有人对RegExs有点狡猾可能将这些结合成一个规则

还要确保已通过

启用了mod重写
RewriteEngine on

在.htaccess

中的重写规则之上