处理域和子域的漂亮http请求

时间:2014-11-17 05:37:20

标签: php regex apache .htaccess mod-rewrite

当前的活动网址系统如下:

http://example.com/dashboard/pages.php
http://example.com/dashboard/page.php?id=10

所以我想要使用相同的网址:

http://example.com/dashboard/pages
http://example.com/dashboard/page/id/10

http://example.com/dashboard指向/ var / www / html / dashboard

当我使用子域名时,我希望如果我使用的话,可以访问相同的URL:

http://subdomain.example.com/pages
http://subdomain.example.com/page/id/10

然后活动网址系统就像:

http://subdomain.example.com/pages.php
http://subdomain.example.com/page.php?id=10

http://subdomain.example.com指向/ var / www / html / dashboard

所以域和子域的根目录不一样。

我只想要它用于php文件。我不希望它影响css或js文件夹结构,因为我正在使用相对路径。

任何人都可以帮助确定htaccess内容应该是什么?我在正则表达式处理方面非常糟糕。

3 个答案:

答案 0 :(得分:1)

试试这个

对于htaccess

AddDefaultCharset UTF-8
Options -Indexes

RewriteEngine on

# Usually it RewriteBase is just '/', but 
# replace it with your subdirectory path
# For root domain following line
RewriteBase /
# For sub directory following line
RewriteRule ^/?([-a-zA-Z0-9_+]+)/?([-a-zA-Z0-9_+]+)/?([0-9]+)/?$  $1.php?$2=$3 [L]

for php中的网址

$re = "/\\.php\\??|=/m";
$str = "http://example.com/dashboard/pages.php\nhttp://example.com/dashboard/page.php?id=10";
$subst = "/";

$result = preg_replace($re, $subst, $str);

<强>输出:

http://example.com/dashboard/pages/ 
http://example.com/dashboard/page/id/10

live demo

答案 1 :(得分:1)

尝试将这些重写规则添加到文档根目录

中的htaccess文件中
Options -Multiviews FollowSymLinks
RewriteEngine On

RewriteCond %{THE_REQUEST} \ /+dashboard/([^/]+)\.php(\?|\ |$)
RewriteRule ^ /dashboard/%1 [L,R=301]

RewriteCond %{THE_REQUEST} \ /+dashboard/([^/]+)\.php\?([^=]+)=([^&\ ]+)
RewriteRule ^ /dashboard/%1/%2/%3 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/dashboard/$1.php -f
RewriteRule ^dashboard/([^/]+)$ /dashboard/$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/dashboard/$1.php -f
RewriteRule ^dashboard/([^/]+)/([^/]+)/([^/]+)$ /dashboard/$1.php?$2=$3 [L,QSA]

然后,为了确保您的所有相关链接(像CSS这样的内容)不会因为您现在拥有完全不同的相对网址基础而被破坏,请将其添加到您网页的标题中:< / p>

<base href="/dashboard/" />

或无论基数应该是什么。

答案 2 :(得分:0)

这将完成工作,

substr(strrchr(rtrim($url, '/'), '/'), 1)

它将获取页码,即10。

这也有助于你,

$url='http://example.com/dashboard/page/id/10';

if(preg_match("/\/(\d+)$/",$url,$matches))
{
  $end=$matches[1];
}

两个代码的输出将是:

10

这是我尝试使用online tool

enter image description here