URL重写向URL添加文件夹名称

时间:2017-11-30 23:57:58

标签: apache .htaccess mod-rewrite

我有一个apache2服务器。

我的目录结构是 - (下面是 - / some-folder / abc

- app
  - otherfolder
  - pqr.php
  - xyz.php
- js
- css

.htaccess放在/ some-folder / abc

虚拟主机的上下文根设置为 - / some-folder /

现在,我希望我的用户输入此网址 - http://someserver.com/abc/xyzhttp://someserver.com/abc/pqr

我想在 - http://someserver.com/abc/app/xyz.phphttp://someserver.com/abc/app/pqr.php

打开页面

如何使用URL重写mod_rewrite

实现此目的

这是我到目前为止所做的,但是没有用 -

Options +FollowSymLinks -MultiViews
#Turn mod_rewrite on
RewriteEngine On
#RewriteBase /abc

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ /app/$1\.php [L] # this doesn't work either
# RewriteRule ^(.*)$ app/$1.php [L] # this doesn't work either
# RewriteRule ^abc/(.*)$ abc/app/$1.php [L] # this doesn't work either

感谢您的帮助。

如果可能的话,我还想使用正斜杠来获取所有查询参数 前 - http://someserver.com/abc/app/xyz.php/xId/123/uId/938/sdh/8374代替http://someserver.com/abc/app/xyz.php?xId=123?uId=938?sdh=8374

查询参数没有模式,它们可以是页面的任何内容。这可能是通用的mod_rewrite,还是我必须为每个页面重写URL,每次我的开发人员添加一个新的查询参数?

1 个答案:

答案 0 :(得分:1)

此规则适用于/abc/.htaccess

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/abc/app/$1.php -f
RewriteRule ^(?!internal)(.+?)/?$ app/$1.php [L,NC]
  • RewriteCond确保我们在.php子目录中有相应的/abc/app/文件。
  • (?!internal)是从这次重写中跳过internal的否定先行断言。

此外,您似乎正在使用css / js / images的相对网址,例如src="abc.png",您当前的网址为:/abc/xyz,然后浏览器会将此相对网址解析为http://example.com/abc/xyz/abc.png,这显然会导致404,因为您的静态文件位于/abc/app/子目录。

您可以在页面的<head>部分的HTML下面添加:

<base href="/abc/app/" />

以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。

另外,作为使用绝对链接而不是相对链接的做法,请将相对链接<a href="xyz">XYZ</a>更改为此<a href="/abc/xyz">XYZ</a>