htaccess mod_rewrite规则组合问题

时间:2015-07-23 19:58:43

标签: php apache .htaccess mod-rewrite redirect

我是apache的新手,所以这是一个基本问题,但我无法使用其他问题或链接来解决这个问题。
我尝试使用URL更改.htaccess,我有两个目的;

  1. 隐藏 .php 扩展程序
  2. 将一些queryString从 somefile.php?id=bar 更改为somefile/id/bar bar是一个数字或混合字符串,如 {{ 1}} 即可。
    我的queryString为T51-3,我想将其更改为 http://localhost/payment/theme/ticket?id=770314
    http://localhost/payment/theme/ticket/id/770314

  3. 我找到了这段代码:

    http://localhost/payment/theme/ticket/770314


    stackoverflow.com/this_question

    这很好但是没有解决我的第二个问题。
    所以,我在这个网站和其他网站搜索了一段时间,并找到了一些像这样的示例代码:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    # To externally redirect /dir/foo.php to /dir/foo
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
    RewriteRule ^ %1 [R,L,NC]
    
    
    ## To internally redirect /dir/foo to /dir/foo.php
    RewriteCond %{REQUEST_FILENAME}.php -f [NC]
    RewriteRule ^ %{REQUEST_URI}.php [L]
    

    RewriteRule ^([a-zA-Z0-9_-]+)-([0-9]+)$ ticket.php?id=$2
    

    等...

    但这些都不适合我。
    其中一些将使服务器完成,一些根本没有任何影响。 你能指导我走正确的路吗?
    我看了这些问题:
    htaccess rewrite for query string

    how to change query string parameters with name using .htaccess?

    How can I use .htaccess to hide .php URL extensions?

    这些链接:
    http://simonecarletti.com/blog/2009/01/apache-query-string-redirects/
    https://wiki.apache.org/httpd/RewriteQueryString

    更新:
    这是我的网站结构: site structure
    重要文件夹有一个htaccess,例如RewriteRule ^(.*)$ /ticket.php?url=$1 [L] formsdb等...
    我的所有网站页面都在classes文件夹中,如图所示。
    在root htaccess中,只有两行自动启动会话。

    我将你的代码添加到主题的htaccess中。
    theme

1 个答案:

答案 0 :(得分:0)

您可以在

中使用此代码
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /payment/theme/

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php\?(\w+)=([^\s&]+)\s [NC]
RewriteRule ^ %1/%2/%3? [R,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

# to handle http://localhost/payment/theme/ticket/id/770314
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\w+)/([\w-]+)/([\w-]+)/?$ $1.php?$2=$3 [L,QSA]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]