.htaccess结构化模块的重写规则

时间:2013-12-04 13:09:14

标签: php regex apache .htaccess mod-rewrite

我正在使用文件夹结构,如下所示: 当前网址: http://test.com/modules/login/login.php?v=1&v2=2&v3=3

我在尝试: http://test.com/modules/login/login/v/1/v2/2/v3/3

我的根文件在:http://test.com/

之后开始

我正在尝试编写.htaccess来隐藏URL中的GET方法值和.php文件名,但由于更多树形结构的URL,我遇到了问题。

RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)$  login.php?$1=$2 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)$  login.php?$1=$2&$3=$4 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)$  login.php?$1=$2&$3=$4&$5=$6 [QSA,L]

以上方法无效?

我们是否需要为单个文件编写规则,是否可以在单一规则中完成?

我也尝试了以下内容:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ login.php?user=$1&page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ login.php?user=$1&page=$2

我的文件夹结构:

----Myproject
-------Config
------------config.php
-------Includes
------------Images
-----------------image.jpg
------------CSS
-----------------test.css
------------JS
-----------------test.js
-------Modules
------------Home
-----------------index.php
------------settings
-----------------config.php
------------login
-----------------login.php
------------Contact 
------------MyPage
-------(.htaccess)

3 个答案:

答案 0 :(得分:1)

DOCUMENT_ROOT/.htaccess文件中使用此代码:

RewriteEngine On

RewriteRule ^(modules/[^/]+/[^/]+)/([^/]+)/([^/]+)(/.*)?$ /$1/$4?$2=$3 [L,QSA,NC]

RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(modules/[^/]+/[^/]+)/?$ /$1.php [L,NC]

外部重定向:

RewriteRule ^(modules/[^/]+/[^/]+)/([^/]+)/([^/]+)(/.*)?$ /$1/$4?$2=$3 [L,QSA,NC]

RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^(modules/[^/]+/[^/]+)/?$ /$1.php [L,NC,R]

答案 1 :(得分:0)

使用下面的代码

RewriteEngine On
RewriteBase /give your full path of your project/
#for hidding get request
# Redirect /login?id=2 to /login/2
RewriteCond %{THE_REQUEST}^[A-Z]/+login\?id=([^&\s]+) [NC]
RewriteRule ^ /login?%1 [R=302,L]
#for hidding .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [QSA,L]

答案 2 :(得分:0)

你想做什么? 传入 URL(搜索引擎友好/搜索引擎优化?)看起来是什么样的,需要转换为什么才能使PHP文件工作呢?你的问题规范非常朦胧。举一些例子。