htaccess mod_rewrite RewriteRule

时间:2013-03-05 02:08:32

标签: apache .htaccess

我正在尝试设置一个.htaccess文件来转换传入的链接,如:

http://domain.com/root/TopNav/SubNav/SEO-friendly-file-name-p#

进入这个:

http://domain.com/root/index.php?t=TopNav&s=SubNav&l=SEO-friendly-file-name&p=#

其中p#是页面ID,TopNav / SubNav表示文件的导航菜单路径

我已经能够在所有情况下都能使用它,除非在.php之后有参数(它执行mod重写,但丢失了参数)。最初,我希望让.htaccess解析url字符串,以便脚本可以使用,但此时我会对任何采用传入url并将其作为字符串转储到root上的解决方案感到满意。的index.php。

这是我目前在.htaccess中的内容:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)/(.*)\.php     index.php?s=$1&p=$2 [L]
RewriteRule ^(.*)/          index.php?p=$1&s=$1 [L]
</IfModule>
ErrorDocument 404 /404.php

对我可能做错了什么的任何想法?建议更好地完成这项工作?

由于

**有人建议将[L]更改为[L,QSA],这似乎有效。谢谢,无论谁提出......

1 个答案:

答案 0 :(得分:0)

使用如下所示的URU:/TopNav/SubNav/SEO-friendly-file-name-p#您需要4个分组:

  1. TopNav
  2. SubNav
  3. SEO友好的文件名称
  4. 因此,您需要制作正则表达式,以便一次性捕获这4个内容。

    尝试:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/([^/]+)/(.+?)-p([0-9]+)$ index.php?t=$1&s=$2&l=$3&p=$4 [L,QSA]
    

    这将放在/root目录

    中的htaccess文件中