仅当目录存在时,才重写Mod

时间:2012-12-02 00:15:09

标签: php apache .htaccess mod-rewrite directory

我的目录结构如下:

/gallery
----index.php
----/23XASDTAGH
----/24XGA43KJA/

如果目录存在,我想使用mod重写来重写。这样:

www.example.com/gallery/23XASDTAGH/

变为

www.example.com/gallery/index.php?gallery=23XASDTAGH

但我想默默地这样做,所以网址没有变化。现在我有了这个:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME}/ -d
RewriteRule (.*) /gallery/index.php?gallery=$1 [L]

一起使用

www.example.com/gallery/23XASDTAGH/

但奇怪的是,当我将结尾的斜线留下时,它会将网址更改为

www.example.com/gallery/23XASDTAGH/?gallery=23XASDTAGH

如何使用或不使用尾部斜杠来使其工作?

3 个答案:

答案 0 :(得分:1)

我认为以下内容可以解决问题

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) /gallery/index.php?gallery=$1 [L]

第二行检查所请求的文件名是否是目录,如果是,则第三行执行实际重写

要尝试处理尾随斜杠问题,也许这样或类似的东西都可以使用

RewriteCond %{REQUEST_FILENAME} (.*)/?$
RewriteCond %1 -d
RewriteRule (.*)/$ /gallery/index.php?gallery=$1 [R=301]

答案 1 :(得分:0)

你可能想试试这个:

RewriteEngine on
RewriteRule ^(gallery)/([a-zA-Z0-9-_=]+)/?$ http://www.example.com/$1/index.php?$1=$2 [R=301,L]

永久重定向输入的网址(浏览器地址栏中的网址):

www.example.com/gallery/23XASDTAGHwww.example.com/gallery/23XASDTAGH/

www.example.com/gallery/index.php?gallery=23XASDTAGH

答案 2 :(得分:-1)

最后想通了,我在重写规则的表达结尾处需要?/来说斜杠是可选的。为什么正则表达式必须如此简单 hard 。 8 - )

正确表达:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}     -d
RewriteRule ^([a-zA-Z0-9_-]+)?/$    /gallery/index.php?gallery=$1 [L]